题目:
让日期区间更友好!
把常见的日期格式如: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 即可
代码:
<script type="text/javascript">
function makeFriendlyDates(arr) {
//获取当前年份
// var yearnow=(new Date()).getFullYear();
var yearnow = 2017;
var date1 = arr[0].split('-');
var date2 = arr[1].split('-');
//去除不正确日期
if (date1[0] > date2[0]) {
return undefined;
}
if (date1[0] == date2[0] && date1[1] > date2[1]) {
return undefined;
}
if (date1[0] == date2[0] && date1[1] == date2[1] && date1[2] > date2[2]) {
return undefined;
}
//把日期转换成对应的简便字符串
function daytostr(day) {
//先转为数值,判断后再转为字符串
day = parseInt(day);
if (day == 1 || day == 21 || day == 31) {
return day.toString() + 'st';
} else if (day == 2 || day == 22) {
return day.toString() + 'nd';
} else if (day == 3 || day == 23) {
return day.toString() + 'rd';
} else {
return day.toString() + 'th';
}
}
//定义月份的英文表示
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
"November", "December"
];
var date1str = '';
var date2str = '';
var newDate = [];
//数组不能直接比较
if (date1[0] == date2[0] && date1[1] == date2[1] && date1[2] == date2[2]) {
newDate.push(months[date1[1] - 1] + ' ' + daytostr(date1[2]) + ', ' + date1[0]);
return newDate;
} else if (parseInt(date1[0]) == yearnow || date1[0] == date2[0]) {
date1str = months[date1[1] - 1] + ' ' + daytostr(date1[2]);
} else {
date1str = months[date1[1] - 1] + ' ' + daytostr(date1[2]) + ', ' + date1[0];
}
newDate.push(date1str);
console.log(date1);
console.log(date2);
//如果同年同月
if (date1[0] == date2[0] && date1[1] == date2[1]) {
date2str = daytostr(date2[2]);
//如果同年不同月
} else {
date2str = months[date2[1] - 1] + ' ' + daytostr(date2[2]);
}
if (date2[0] - date1[0] > 1 || ((date2[0] - date1[0] == 1) && (date2[1] - date1[1] > 0)) || ((date2[0] - date1[0] ==
1) && (date2[1] - date1[1] == 0) && (date2[2] - date1[2] >= 0))) {
date2str = date2str + ', ' + date2[0];
} else if (date1[0] == yearnow) {
}
return newDate;
}
</script>