Friendly Date Ranges 让日期区间更友好
程序员文章站
2022-06-19 21:46:22
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和 ......
把常见的日期格式如:yyyy-mm-dd
转换成一种更易读的格式。
易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st
代替 1
).
记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。
另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期的年份也不用写。
function makefriendlydates(arr) { //当前年份2017 var arr1 = arr[0].split("-"); var arr2 = arr[1].split("-");var month = { //月份 "01":"january", "02":"february", "03":"march", "04":"april", "05":"may", "06":"june", "07":"july", "08":"august", "09":"september", "10":"october", "11":"november", "12":"december" }; function getday(day){ //日期结尾 if(day == "1" || day == "21" || day == "31"){ return "st"; }else if(day == "2" || day == "22"){ return "nd"; }else if(day == "3" || day == "23"){ return "rd"; }else { return "th"; } } function getd(day){ //将01、02等改为1、2等 添加结尾 var n; if(day / 10 < 1){ n = day % 10; }else{ n = day; } return n + getday(n); } function getda(year, mon, day){ //拼接 var darr; if(!mon && !year){ darr = getd(day); }else if(!year){ darr = month[mon] +" " + getd(day); }else{ darr = month[mon] +" " + getd(day)+ ", " + year; } return darr; } var cha = arr2.join("") - arr1.join(""); if(cha < 0){ //不合理 return undefined; }else if(cha > 0){ //不是同一天 if(cha < 10000){ //相差1年以内 if(arr1[0] == 2017){ //1年以内且开始年份为当前年份 if(arr1[1] == arr2[1]){ //月份相同 return [getda("", arr1[1], arr1[2]), getda("", "", arr2[2])]; }else{ //月份不同 return [getda("", arr1[1], arr1[2]), getda("", arr2[1], arr2[2])]; } }else{ //1年以内且开始年份非当前年份 return [getda(arr1[0], arr1[1], arr1[2]), getda("", arr2[1], arr2[2])]; } }else{ //相差大于1年 return [getda(arr1[0], arr1[1], arr1[2]), getda(arr2[0], arr2[1], arr2[2])]; } }else{ //是同一天 return [getda(arr1[0], arr1[1], arr1[2])]; } } makefriendlydates(["2001-12-20", "2001-12-20"]);
上一篇: 面向对象封装、继承、多态