让日期区间更友好!

把常见的日期格式如: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;
} //判断是否是合理的月份和日期

最新文章

  1. CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
  2. Struts2和Spring的整合
  3. 就这样获取文件的MD5和大小
  4. jboss7访问日志功能及使用goaccess工具分析
  5. 炼数成金hadoop视频干货02
  6. 超强vim配置文件
  7. Hadoop之初体验
  8. kafkaspout以及kafkabolt的最简实例
  9. dbf导入sqlserver的方法
  10. 【bzoj 2326】【HNOI 2011】数学作业
  11. json中的json.dumps()
  12. Python——电子邮件、Internet协议相关模块
  13. 论文笔记:Decoders Matter for Semantic Segmentation: Data-Dependent Decoding Enables Flexible Feature Aggregation
  14. ASP.NET Core - Razor 页面介绍
  15. C++ template —— template metaprogram(九)
  16. systemctl centos fedora 用法
  17. gzez某蒟蒻lyy的博客
  18. Django的FBV和CB
  19. 1 - Reverse Integer
  20. 导航条且手机版.html——仿照官网例子

热门文章

  1. PKU 1035 Spell checker(Vector+String应用)
  2. CCF 炉石传说(模拟)
  3. 常用RDD
  4. java.lang.ClassFormatError: Trjava.lang.ClassFormatError: Truncated class fileuncated class file
  5. Linux数据备份与恢复
  6. Linux查看本机登陆用户信息(w、who、last和lastlog命令)
  7. 《Java入门第三季》第二章 认识 Java 中的字符串
  8. Jquery编历数组
  9. 20144303 《Java程序设计》第八周学习总结
  10. 地址之间的复制,memcpy函数