让日期区间更友好!
把常见的日期格式如:YYYY-MM-DD
转换成一种更易读的格式。
易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st
代替 1
).
记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。
另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期的年份也不用写。
例如:
包含当前年份和相同月份的时候,makeFriendlyDates(["2017-01-02", "2017-01-05"])
应该返回 ["January 2nd","5th"]
不包含当前年份,makeFriendlyDates(["2003-08-15", "2009-09-21"])
应该返回 ["August 15th, 2003", "September 21st, 2009"]
。
请考虑清楚所有可能出现的情况,包括传入的日期区间是否合理。对于不合理的日期区间,直接返回 undefined
即可
当你遇到困难的时候,记得查看错误提示、阅读文档、搜索、提问。
这是一些对你有帮助的资源:
本题的思路是先把字符串分割,然后取整年月日,根据条件返回不同的日期期间 ,话不多说,上代码:
function makeFriendlyDates(arr) { if (!Array.isArray(arr)||arr.length!==2) return false; var month=['January','February','March','April','May','June','July','August','September','October','November','December']; var day=['1st','2nd','3rd','4th','5th','6th','7th','8th','9th','10th','11th','12th','13th','14th','15th','16th','17th','18th','19th','20th','21st','22nd','23rd','24th','25th','26th','27th','28th','29th','30th','31st']; var fst=arr[0].split('-'); var sec=arr[1].split('-'); isRational(parseInt(fst[1]),parseInt(fst[2])); //判断日期是否正确 isRational(parseInt(sec[1]),parseInt(sec[2])); //判断日期是否正确 if(parseInt(fst[0])>parseInt(sec[0])) return undefined; //开始年份要小于结束年份 var result=[]; var str1=''; var str2=''; str1=month[parseInt(fst[1])-1]+' '+day[parseInt(fst[2])-1]+', '+fst[0]; str2=month[parseInt(sec[1])-1]+' '+day[parseInt(sec[2])-1]+', '+sec[0]; //先写完整的输出格式,然后根据条件不同再分割 if(sec[0]===fst[0]||(parseInt(sec[0])-parseInt(fst[0])==1&&parseInt(sec[1])-parseInt(fst[1])<0)||(parseInt(sec[0])-parseInt(fst[0])==1&&parseInt(sec[1])-parseInt(fst[1])===0&&parseInt(sec[2])-parseInt(fst[2])<0)){ str2=str2.substring(0,str2.indexOf(',')); //判断小于一年 if(parseInt(fst[0])===2017){ str1=str1.substring(0,str1.indexOf(',')); } //是否是当年 if(sec[0]===fst[0]&&parseInt(fst[1])===parseInt(sec[1])){ str2=str2.substr(-day[parseInt(sec[2])-1].length); //年月相同 if(parseInt(fst[2])===parseInt(sec[2])){ str2=''; //年月日相同 } } } result[0]=str1; if(str2!==''){ result[1]=str2; } return result; } function isRational(month,day){ if(typeof month !=='number'||typeof day !=='number') return false; if(month>12||month<1||day>31||day<1) return undefined; } //判断是否是合理的月份和日期