JS:让日期更加智能化地显示

来源:互联网 发布:信息是数据的什么 编辑:程序博客网 时间:2024/05/17 23:38

一个时间段,有开始及结束日期,格式均为2016-10-10

函数传入参数的格式为makeFriendlyDates(["2016-07-01", "2018-10-04"]);,前者为开始日期,后者为结束日期。

函数期望返回结果为以下格式:

如果年月日均不相同,则返回:[ 'July 1st, 2016', 'October 4th, 2018' ]
如果年份相同,则返回:[ 'July 1st', 'October 4th' ]
如果年份和月份都相同,则返回:[ 'July 1st', '4th' ]


完整代码:

function makeFriendlyDates(arr) {  //创建结果数组,按照新格式存入  var result = arr.map(function(e){    return newDateFormat(e);  });  //如果年份相同  if(result[0].substr(-4)===result[1].substr(-4)){    //两个字符串都去掉年份    result = result.map(function(e){      return e.substring(0,e.length-6);    });    //定义月份名称的正则    //挑出开始月份及结束月份    var regMonth = /[a-zA-Z]{3,9}/g;    var startMonth = result[0].match(regMonth).join('');    var endMonth = result[1].match(regMonth).join('');    //月份相同的情况    if(startMonth===endMonth){      //结束日期把月份删掉      result[1] = result[1].substring(endMonth.length).trim();      return result;    }    else{      return result;    }  }  else{    return result;  }  //转化日期表现格式的函数  function newDateFormat(str){    //把字符串变为数组便于处理    let arr = str.split("-");    return getMonth(arr[1]) + " " + getDay(arr[2]) + ", " + arr[0];  }  //获取月份名称  function getMonth(m){    let month = ['January','February','March','April','May','June','July','August','September','October','November','December'];    m = parseInt(m);    return month.filter(function(e,i){      if(m===i+1){        return month[m-1];      }    }).join("");  }  //获取日名称  function getDay(d){    d = parseInt(d);    if(d===1 || d===21 || d===31){      return d+"st";    }    else if(d===2 || d==22){      return d+"nd";    }    else if(d===3 || d===23){      return d+"rd";    }    else if((d>=4&&d<=20)||(d>=24&&d<=30)){      return d+"th";    }  }}

DEMO:Friendly Date Ranges

0 0
原创粉丝点击