题目
让日期区间更友好!
把常见的日期格式如: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 即可
要求
makeFriendlyDates(["2017-01-02", "2017-01-05"]) 应该返回 ["January 2nd","5th"].
makeFriendlyDates(["2017-02-01", "2017-03-03"]) 应该返回 ["February 1st","March 3rd"].
makeFriendlyDates(["2016-05-11", "2017-04-04"]) 应该返回 ["May 11th, 2016","April 4th"].
makeFriendlyDates(["2017-07-12", "2018-06-13"]) 应该返回 ["July 12th","June 13th"]
makeFriendlyDates(["2003-08-15", "2009-09-21"]) 应该返回 ["August 15th, 2003", "September 21st, 2009"].
makeFriendlyDates(["2010-10-23", "2011-10-22"]) 应该返回 ["October 23rd, 2010","October 22nd"].
makeFriendlyDates(["2008-10-31", "2009-10-31"]) 应该返回 ["October 31st, 2008","October 31st, 2009"].
makeFriendlyDates(["2004-11-17", "2005-12-25"]) 应该返回 ["November 17th, 2004","December 25th, 2005"].
makeFriendlyDates(["2001-12-20", "2001-12-20"]) 应该返回 ["December 20th, 2001"].
makeFriendlyDates(["2002-12-20", "2001-12-20"]) 不应该返回数组
代码
function makeFriendlyDates(arr) {
var month_object = {
"01" : "January",
"02" : "February",
"03" : "March",
"04" : "April",
"05" : "May",
"06" : "June",
"07" : "July",
"08" : "August",
"09" : "September",
"10" : "October",
"11" : "November",
"12" : "December"
};
var keys = Object.keys(month_object);
var date1 = arr[0].split("-");
var date2 = arr[1].split("-");
var result = [];
if(parseInt(date2[0]) < parseInt(date1[0])){
return null;
}
if(parseInt(date2[0]) == parseInt(date1[0]) && parseInt(date2[1]) < parseInt(date1[1])){
return null;
}
if(parseInt(date2[0]) == parseInt(date1[0]) && parseInt(date2[1]) == parseInt(date1[1]) && parseInt(date2[2]) < parseInt(date1[2])){
return null;
}
if(parseInt(date2[0]) == parseInt(date1[0]) && parseInt(date2[1]) == parseInt(date1[1]) && parseInt(date2[2]) == parseInt(date1[2])){
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])) + ", " + date2[0]);
return result;
}
if(parseInt(date1[0]) >= 2017) {
result.push(month_object[date1[1]] + " " + makeDay(parseInt(date1[2])));
if(date2[0] <= 2018){
if(parseInt(date1[1]) == parseInt(date2[1])) {
result.push(makeDay(parseInt(date2[2])));
}
else if(parseInt(date1[1]) > parseInt(date2[1])){
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])));
}
else {
if(date2[0] == 2017) {
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])));
}
else {
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])) + ", " + date2[0]);
}
}
}
}
else {
if(parseInt(date2[0]) - parseInt(date1[0]) === 1) {
result.push(month_object[date1[1]] + " " + makeDay(parseInt(date1[2])) + ", " + date1[0]);
if(parseInt(date1[1]) > parseInt(date2[1])){
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])));
}
else if(parseInt(date1[1]) == parseInt(date2[1])){
if(parseInt(date1[2]) > parseInt(date2[2])){
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])));
}
else {
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])) + ", " + date2[0]);
}
}
else {
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])) + ", " + date2[0]);
}
}
else if(parseInt(date2[0]) - parseInt(date1[0]) === 0){
result.push(month_object[date1[1]] + " " + makeDay(parseInt(date1[2])) + ", " + date1[0]);
if(parseInt(date1[1]) == parseInt(date2[1])){
result.push(makeDay(parseInt(date2[2])));
}
else {
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])));
}
}
else {
result.push(month_object[date1[1]] + " " + makeDay(parseInt(date1[2])) + ", " + date1[0]);
result.push(month_object[date2[1]] + " " + makeDay(parseInt(date2[2])) + ", " + date2[0]);
}
}
function makeDay(day){
if(day <= 20 && day >= 4) {
return day + "th";
}
else if(day >= 24 && day <= 30) {
return day + "th";
}
else if(day <= 3 || day <= 23 || day == 31) {
if(day%20 ==1 || day%30 ==1) {
return day + "st";
}
if(day%20 == 2) {
return day + "nd";
}
if(day%20 == 3) {
return day + "rd";
}
}
else {
return "";
}
}
return result;
}
makeFriendlyDates(["2001-12-20", "2001-12-20"]);