要求
让日期区间更友好!
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。
易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1).
记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。
解答
function makeFriendlyDates(arr) {
var dataList=["", "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 monthList=["", "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
var arr1=arr[0], arr2=arr[1], array=[];
arr1=arr1.split('-'); arr2=arr2.split('-');
var myDate = new Date();
var year=myDate.getFullYear();
//get the number
var y1=parseInt(arr1[0],10),y2=parseInt(arr2[0],10);
var m1=parseInt(arr1[1],10),m2=parseInt(arr2[1],10);
var d1=parseInt(arr1[2],10),d2=parseInt(arr2[2],10);
//transfer
arr1[2]=dataList[parseInt(arr1[2],10)];
arr2[2]=dataList[parseInt(arr2[2],10)];
arr1[1]=monthList[parseInt(arr1[1],10)];
arr2[1]=monthList[parseInt(arr2[1],10)];
//compare
if(y2-y1>=0){
if(y2-y1<1||(y2-y1==1&&(m1>m2||(m1==m2&&d1>d2)))){
if(y1===year){
if(m1==m2)
array.push(arr1[1]+" "+arr1[2],arr2[2]);
else
array.push(arr1[1]+" "+arr1[2],arr2[1]+" "+arr2[2]);
}else {
if(m1==m2&&d1==d2)
array.push(arr1[1]+" "+arr1[2]+", "+arr1[0]);
else if(m1<m2)
array.push(arr1[1]+" "+arr1[2]+", "+arr1[0],arr2[2]);
else
array.push(arr1[1]+" "+arr1[2]+", "+arr1[0],arr2[1]+" "+arr2[2]);
}
}
else
array.push(arr1[1]+" "+arr1[2]+", "+arr1[0],arr2[1]+" "+arr2[2]+", "+arr2[0]);
}else
return undefined;
return array;
}
makeFriendlyDates(["2002-12-20", "2001-12-20"]);