js获取指定日期范围的所有日期列表

        最近开发的时候遇到一种情况,就是后台只返回开始日期和结束日期,但是页面需要展示这一段时间的日期列表,所以写个工具函数处理一下这类问题。

解决思路:

1、判断遍历开始日期和结束日期存在的三种情况

(1)同年同月

(2)同年不同月

(3)不同年不同月

2、获取开始日期所在月的月底日期数,便于在遍历的时候作为一个判断条件,将大于这个数的日期额外处理。

3.、格式化日期

实现代码:【目前只支持开始日期和结束日期相隔不超过一个月】

function getRangeDate(startDate, endDate) {
  let targetArr = [];
  let start = new Date(startDate);
  let end = new Date(endDate);
  let startDateInfo = {
    year: start.getFullYear(),
    month: start.getMonth() + 1,
    day: start.getDate() 
  };
  let endDateInfo = {
    year: end.getFullYear(),
    month: end.getMonth() + 1,
    day: end.getDate() 
  };
  if(startDateInfo.year === endDateInfo.year){  //同年
    if(startDateInfo.month !== endDateInfo.month){   //同年,不同月份
      //获取开始时间所在月的月底日期
      let startMax = new Date(startDateInfo.year, startDateInfo.month, 0).getDate();
      let endNum = startMax - startDateInfo.day + endDateInfo.day;
      for(let i = startDateInfo.day; i <= startDateInfo.day+endNum; i++){
        if(i > startMax){
          targetArr.push(`${endDateInfo.year}-${
            endDateInfo.month<10? 
            "0"+ endDateInfo.month: 
            endDateInfo.month
          }-${i-startMax < 10? "0" + (i-startMax): i-startMax}`);
        } else {
          targetArr.push(`${startDateInfo.year}-${
            startDateInfo.month<10? 
            "0"+ startDateInfo.month: 
            startDateInfo.month
          }-${i < 10? "0" + i: i}`);
        }
      }
    } else {  //同年同月
      for(let i = startDateInfo.day; i <= endDateInfo.day; i++){
        targetArr.push(`${startDateInfo.year}-${
          startDateInfo.month<10? 
          "0"+ startDateInfo.month: 
          startDateInfo.month
        }-${i<10? "0"+ i: i}`)
      }
    }
  } else {   //不同年   【既然不同年那肯定也不同月】
    let startMax = new Date(startDateInfo.year, startDateInfo.month, 0).getDate();
    let endNum = startMax - startDateInfo.day + endDateInfo.day;
    for(let i = startDateInfo.day; i <= startDateInfo.day+endNum; i++){
      if(i > startMax){
        targetArr.push(`${endDateInfo.year}-${
          endDateInfo.month<10? 
          "0"+ endDateInfo.month:
          endDateInfo.month
        }-${i-startMax < 10? "0" + (i-startMax): i-startMax}`);
      } else {
        targetArr.push(`${startDateInfo.year}-${
          startDateInfo.month<10? 
          "0"+ startDateInfo.month: 
          startDateInfo.month
        }-${i < 10? "0" + i: i}`);
      }
    }
  }
  
  return targetArr;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值