Friendly Date Ranges
2024-10-19 21:52:24
让日期区间更友好!
把常见的日期格式如: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;
} //判断是否是合理的月份和日期
最新文章
- CSS3魔法堂:CSS3滤镜及Canvas、SVG和IE滤镜替代方案详解
- Struts2和Spring的整合
- 就这样获取文件的MD5和大小
- jboss7访问日志功能及使用goaccess工具分析
- 炼数成金hadoop视频干货02
- 超强vim配置文件
- Hadoop之初体验
- kafkaspout以及kafkabolt的最简实例
- dbf导入sqlserver的方法
- 【bzoj 2326】【HNOI 2011】数学作业
- json中的json.dumps()
- Python——电子邮件、Internet协议相关模块
- 论文笔记:Decoders Matter for Semantic Segmentation: Data-Dependent Decoding Enables Flexible Feature Aggregation
- ASP.NET Core - Razor 页面介绍
- C++ template —— template metaprogram(九)
- systemctl centos fedora 用法
- gzez某蒟蒻lyy的博客
- Django的FBV和CB
- 1 - Reverse Integer
- 导航条且手机版.html——仿照官网例子
热门文章
- PKU 1035 Spell checker(Vector+String应用)
- CCF 炉石传说(模拟)
- 常用RDD
- java.lang.ClassFormatError: Trjava.lang.ClassFormatError: Truncated class fileuncated class file
- Linux数据备份与恢复
- Linux查看本机登陆用户信息(w、who、last和lastlog命令)
- 《Java入门第三季》第二章 认识 Java 中的字符串
- Jquery编历数组
- 20144303 《Java程序设计》第八周学习总结
- 地址之间的复制,memcpy函数