Friendly Date Ranges

题目

让日期区间更友好!

把常见的日期格式如: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"]);

猜你喜欢

转载自blog.csdn.net/kyr1e/article/details/79181953