Friendly‘ Date Ranges

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 即可

有时候网站应该会更新时间,所以当前年份应该会改变的,所以小伙伴们要注意哟。这个代码是参考别的大腿然后自己稍加修改的,小伙伴们可以多提提意见。

代码如下:

function makeFriendlyDates(arr) {
  // 月份数组
  var mounth = [
    "January", "February", "March", "April", "May", "June",
    "July",  "August", "September", "October", "November", "December"
  ];
  // 日期后缀数组
  var dayNth = ["st","nd","rd","th"];
  // 设置当前年份
  var nowYear = '2017';

  //设置要显示的数组里的内容
  function getTime(arr) {
    var r = [];
    var timeF = arr[0].split('-');//传入的第一个日期
    var timeB = arr[1].split('-');//传入的第二个日期
    //先设置返回的第二个日期参数
    var yearB = diffYear(arr[0], arr[1]) ? "" : ", " + timeB[0];
    var mounthB = (timeB[0] === timeF[0] && timeB[1] === timeF[1]) ? "" : mounth[timeB[1]-1] + " ";
    var dayB = parseInt(timeB[2]);
    //设置返回的第一个日期参数
    var yearF = ( timeF[0] === nowYear && diffYear(arr[0], arr[1]) ) ? "" : ", " + timeF[0];
    var mounthF = mounth[timeF[1]-1] + " ";
    var dayF = parseInt(timeF[2]);

    if( arr[0]=== arr[1]) {//同年同月同日
      return [mounth[timeF[1]-1] + " " + dayF + dayNth[nthNum(dayF)]+ ", " + timeB[0]];
    }

    if(timeF[0]>timeB[0]){//区间不合理返回Undefined
      return undefined;
    }

    var rF = mounthF + dayF + dayNth[nthNum(dayF)] + yearF;
    var rB = mounthB + dayB + dayNth[nthNum(dayB)] + yearB;
    r.push(rF, rB);

    return r;
  }

  function diffYear(time1, time2) {
    var diff = new Date(time2) - new Date(time1);
    if(diff/1000/60/60/24 < 365) {
      return true;//如果日期间隔小于一年,返回true
    }
    return false;//如果日期间隔大于一年,返回false
  }

  function nthNum(x) {//判断日期给day加后缀
   switch(x){
     case 1:
     case 21:
     case 31:
       return 0;
     case 2:
     case 22:
       return 1;
     case 3:
     case 23:
       return 2;
     default:
       return 3;
   }
  }

  var res = getTime(arr);
  return res;
}
makeFriendlyDates(["2017-01-02", "2017-01-05"]);

小伙伴多多推敲,就可以完成friendly date ranges那一课啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值