欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Friendly Date Ranges 让日期区间更友好

程序员文章站 2022-06-19 21:46:22
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和 ......

把常见的日期格式如:yyyy-mm-dd 转换成一种更易读的格式。

易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1).

记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。

另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期的年份也不用写。

function makefriendlydates(arr) {   //当前年份2017
  var arr1 = arr[0].split("-");
  var arr2 = arr[1].split("-");var month = {                   //月份
    "01":"january",
    "02":"february",
    "03":"march",
    "04":"april",
    "05":"may",
    "06":"june",
    "07":"july",
    "08":"august",
    "09":"september",
    "10":"october",
    "11":"november",
    "12":"december"
  };
  function getday(day){      //日期结尾
    if(day == "1" || day == "21" || day == "31"){
      return "st";
    }else if(day == "2" || day == "22"){
      return "nd";
    }else if(day == "3" || day == "23"){
      return "rd";
    }else {
      return "th";
    }  
  }
  function getd(day){          //将01、02等改为1、2等 添加结尾
    var n;
    if(day / 10 < 1){
      n = day % 10;
    }else{
      n = day;
    }
    return n + getday(n);
  }
  function getda(year, mon, day){        //拼接
    var darr;
    if(!mon && !year){
      darr = getd(day);
    }else if(!year){
      darr = month[mon] +" " + getd(day);
    }else{
      darr = month[mon] +" " + getd(day)+ ", " + year;
    }
    return darr;
  }
  var cha = arr2.join("") - arr1.join("");  
  if(cha < 0){               //不合理
    return undefined;
  }else if(cha > 0){        //不是同一天
    if(cha < 10000){             //相差1年以内
      if(arr1[0] == 2017){            //1年以内且开始年份为当前年份
        if(arr1[1] == arr2[1]){            //月份相同        
          return [getda("", arr1[1], arr1[2]), getda("", "", arr2[2])];
        }else{                             //月份不同
          return [getda("", arr1[1], arr1[2]), getda("", arr2[1], arr2[2])];
        }
      }else{                          //1年以内且开始年份非当前年份
        return [getda(arr1[0], arr1[1], arr1[2]), getda("", arr2[1], arr2[2])];
      }
    }else{                       //相差大于1年
      return [getda(arr1[0], arr1[1], arr1[2]), getda(arr2[0], arr2[1], arr2[2])];
    }         
  }else{                  //是同一天
    return [getda(arr1[0], arr1[1], arr1[2])];
  }
}
makefriendlydates(["2001-12-20", "2001-12-20"]);