zoukankan      html  css  js  c++  java
  • js-FCC算法Friendly Date Ranges

    让日期区间更友好!

    把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。

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

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

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

    我的代码:

     1 function makeFriendlyDates(arr) {
     2   //获得目前的年份
     3   var yearnow=(new Date()).getFullYear();
     4   //把传入的参数放入字符串数组,创建Date类型也可以
     5   var date1=arr[0].split("-");
     6   var date2=arr[1].split("-");
     7   //月份的英文表示
     8   var months=["January","February","March","April","May","June","July","August","September","October","November","December"];
     9   //初始化几个后面用到的数组
    10   var date1str="";
    11   var date2str="";
    12   var datearr=[];
    13   //给日期加后缀的函数
    14   function friendlydate(str){
    15     var str2num=Number(str);
    16     switch(str2num){
    17       case 1:
    18         str2num+="st";
    19         break;
    20       case 2:
    21         str2num+="nd";
    22         break;
    23       case 3:
    24         str2num+="rd";
    25         break;
    26       default:
    27         str2num+="th";
    28     }
    29     return str2num;
    30   }
    31   //date1的字符串表示大部分情况下都是需要年月日的。date2的如果不是在同年同月,大部分情况下都是需要月日的
    32   date1str=months[date1[1]-1]+" "+friendlydate(date1[2])+", "+date1[0];
    33   if(date1[1]===date2[1]&&date1[0]===date2[0]){
    34     date2str=friendlydate(date2[2]);
    35   }else{
    36     date2str=months[date2[1]-1]+" "+friendlydate(date2[2]);
    37   }
    38   //如果大于一年,date2加上年份;如果小于一年,而且date1的日期是今年,那么去掉date1的年份。
    39   if((date2[0]-date1[0]>1)||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]>0))||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]===0)&&date2[2]-date1[2]>=0)){
    40     date2str+=", "+date2[0];
    41   }else if(date1[0]==yearnow){
    42     date1str=date1str.slice(0,-6);
    43   }
    44   //把两个日期放在同一个数组里输出(如果是同年同月同日,代码里的date2str无用,所以代码是可以改善的)。
    45   datearr[datearr.length]=date1str;
    46   if(date1.toString()!==date2.toString()){
    47     datearr[datearr.length]=date2str;
    48   }
    49   return datearr;
    50 }

    特殊情况下,date2str是没用的,有空改善一下。

  • 相关阅读:
    centos 7 开放端口
    删除mysql 表中重复的数据
    约瑟夫问题
    Technocup 2020 Elimination Round 3题解
    DISCO Presents Discovery Channel Code Contest 2020 Qual题解
    Comet OJ
    Berlekamp-Massey算法
    CH定理与线性递推
    2020集训队作业板刷记录(一)
    模拟费用流
  • 原文地址:https://www.cnblogs.com/zczhangcui/p/6102628.html
Copyright © 2011-2022 走看看