Friendly Date Ranges

2017-10-18  本文已影响0人  Oracle_c113

要求

让日期区间更友好!

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

猜你喜欢

热点阅读