js 计算两个日期间所有的日期(moment.js实现)

使用步骤

1.先引入 moment.js 

cdn 引入

<script src="https://cdn.bootcss.com/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdn.bootcss.com/moment.js/2.20.1/locale/zh-cn.js"></script>

 或者 直接下载 下来 。如果是 框架里 用 

npm install moment --save

Moment.js 中文网

实现过程 

代码如下:

格式可以随意改 。只要符合 moment规定的就行

  不带 星期 几的

function  enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
        let daysList = [];
        let SDate=moment(startDate);
        let EDate=moment(endDate);
        let xt;
        daysList.push(SDate.format("MM-DD"));
        while( SDate.add(1,"days").isBefore( EDate) ){  // 注意这里add方法处理后SDate对象已经改变。      
            daysList.push( SDate.format("MM-DD") );
        } 
        daysList.push( EDate.format("MM-DD") );
        return daysList;
  }
console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))

 带星期几的

 其实就是 格式化问题 加上 dddd就行

function  enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
        let daysList = [];
        let SDate=moment(startDate);
        let EDate=moment(endDate);
        let xt;
        daysList.push(SDate.format("MM-DD dddd"));
        while( SDate.add(1,"days").isBefore( EDate) ){  // 注意这里add方法处理后SDate对象已经改变。      
            daysList.push( SDate.format("MM-DD dddd") );
        } 
        daysList.push( EDate.format("MM-DD dddd") );
        return daysList;
  }
console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))
console.log( enumerateDaysBetweenDates('2021-06-09 13:00','2021-06-12 21:00'))

如果想要 带年份 加个 YYYY就行  格式可以随意 改 。只要符合 moment规定的就行

function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
        let daysList = [];
        let SDate = moment(startDate);
        let EDate = moment(endDate);
        let xt;
        daysList.push(SDate.format("YYYY-MM-DD dddd"));
        while (SDate.add(1, "days").isBefore(EDate)) {  // 注意这里add方法处理后SDate对象已经改变。
            daysList.push(SDate.format("YYYY-MM-DD dddd"));
        }
        daysList.push(EDate.format("YYYY-MM-DD dddd"));
        return daysList;
    }
    console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    console.log(enumerateDaysBetweenDates('2021-06-09 23:00', '2021-06-12 01:00'))
    console.log(enumerateDaysBetweenDates('2021-06-09 13:00', '2021-06-12 21:00'))

 获取两个 年份 之间的年份

会发现有警告:

moment.min.js:1 Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

意思就是:

moment.min.js:1弃用警告:提供的值不是可识别的RFC2822或ISO格式。moment构造回溯到js Date(),这在所有浏览器和版本中都不可靠。不鼓励使用非RFC2822/ISO日期格式,并将在即将发布的主要版本中删除。请参阅http://momentjs.com/guides/#/warnings/js-日期/了解更多信息。

解决方案:

这个 说明 日期不符合 格式 加个 new Date就行了 

 console.log(enumerateDaysBetweenDates(new Date('2001'),new Date('2005')))
const enumerateDaysBetweenDates = (startDate, endDate) => {
      let daysList = [];
      const start = moment(startDate);
      const end = moment(endDate);
      const day = end.diff(start, "year");
      daysList.push(start.format("YYYY"));
      for (let i = 1; i <= day; i++) {
        daysList.push(start.add(1, "year").format("YYYY"));
      }
      return daysList;
    };
    console.log(enumerateDaysBetweenDates('2001','2005'))

 其实年份 是最简单的不用 moment.js 也可以 一个 for循环就行 ,不想要 开始和结尾 那就 改变for循环的条件 i<=变成 i<。

 function enumerateDaysBetweenDates(startDate, endDate) {
        let daysList = [];

        for (let i = Number(startDate); i <= Number(endDate); i++) {
            daysList.push(String(i));
        }
        return daysList;
    };
    console.log(enumerateDaysBetweenDates('2001', '2005'))

获取两个月 份之间的月

其实 也是一个 for循环就行,不想要 开始和结尾 那就 改变for循环的条件 i<=变成 i<。

这个只是 年内 的可以这样做

function enumerateDaysBetweenDates(startDate, endDate) {
        let daysList = [];
        for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
            daysList.push(String(i));
        }
        return daysList;
    };
    console.log(enumerateDaysBetweenDates('6', '12'))

moment.js的方法 跨年了 最好 带上 年份

不想要 几号 那就把 DD去掉

unction enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
        let daysList = [];
        let SDate = moment(startDate);
        let EDate = moment(endDate);
        let xt;
        daysList.push(SDate.format("YYYY-MM-DD"));
        while (SDate.add(1, "month").isBefore(EDate)) {  // 注意这里add方法处理后SDate对象已经改变。
            daysList.push(SDate.format("YYYY-MM-DD"));
        }
        daysList.push(EDate.format("YYYY-MM-DD"));
        return daysList;
    }
    console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))

所有代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script src="https://cdn.bootcss.com/moment.js/2.20.1/moment.min.js"></script>
<script src="https://cdn.bootcss.com/moment.js/2.20.1/locale/zh-cn.js"></script>
<script>
    // // 带星期的
    // function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
    //     let daysList = [];
    //     let SDate = moment(startDate);
    //     let EDate = moment(endDate);
    //     let xt;
    //     daysList.push(SDate.format("YYYY-MM-DD dddd"));
    //     while (SDate.add(1, "days").isBefore(EDate)) {  // 注意这里add方法处理后SDate对象已经改变。
    //         daysList.push(SDate.format("YYYY-MM-DD dddd"));
    //     }
    //     daysList.push(EDate.format("YYYY-MM-DD dddd"));
    //     return daysList;
    // }
    // console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    // console.log(enumerateDaysBetweenDates('2021-06-09 23:00', '2021-06-12 01:00'))
    // console.log(enumerateDaysBetweenDates('2021-06-09 13:00', '2021-06-12 21:00'))

    /*
     //获取两个年 之间 的年份
    function enumerateDaysBetweenDates  (startDate, endDate){
          let daysList = [];
          const start = moment(startDate);
          const end = moment(endDate);
          const day = end.diff(start, "year");
          daysList.push(start.format("YYYY"));
          for (let i = 1; i <= day; i++) {
            daysList.push(start.add(1, "year").format("YYYY"));
          }
          return daysList;
        };
        console.log(enumerateDaysBetweenDates('2001','2005'))

    //for循环实现
    function enumerateDaysBetweenDates(startDate, endDate) {
        let daysList = [];

        for (let i = Number(startDate); i <= Number(endDate); i++) {
            daysList.push(String(i));
        }
        return daysList;
    };
    console.log(enumerateDaysBetweenDates('2001', '2005'))
     */

    /*
    //不带 星期的
    function  enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
            let daysList = [];
            let SDate=moment(startDate);
            let EDate=moment(endDate);
            let xt;
            daysList.push(SDate.format("MM-DD"));
            while( SDate.add(1,"days").isBefore( EDate) ){  // 注意这里add方法处理后SDate对象已经改变。      
                daysList.push( SDate.format("MM-DD") );
            } 
            daysList.push( EDate.format("MM-DD") );
            return daysList;
      }
    console.log( enumerateDaysBetweenDates('2021-06-09','2021-06-12'))
    console.log( enumerateDaysBetweenDates('2021-06-09 23:00','2021-06-12 01:00'))
    console.log( enumerateDaysBetweenDates('2021-06-09 13:00','2021-06-12 21:00'))
    */

    /* 
    //获取两个月份间的 月份
    function enumerateDaysBetweenDates(startDate, endDate) {
        let daysList = [];
        for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
            daysList.push(String(i));
        }
        return daysList;
    };
    console.log(enumerateDaysBetweenDates('6', '12'))

    //moment.js实现 跨年 且带 年份  不想要 几号可以去掉 DD
    function enumerateDaysBetweenDates(startDate, endDate) { // 假定你已经保证了startDate 小于endDate,且二者不相等
        let daysList = [];
        let SDate = moment(startDate);
        let EDate = moment(endDate);
        let xt;
        daysList.push(SDate.format("YYYY-MM-DD"));
        while (SDate.add(1, "month").isBefore(EDate)) {  // 注意这里add方法处理后SDate对象已经改变。
            daysList.push(SDate.format("YYYY-MM-DD"));
        }
        daysList.push(EDate.format("YYYY-MM-DD"));
        return daysList;
    }
    console.log(enumerateDaysBetweenDates('2021-06-09', '2022-06-12'))
    */


    function enumerateDaysBetweenDates(startDate, endDate) {
        let daysList = [];
        for (let i = Number(startDate); i <= Number(endDate)&&i<=12; i++) {
            daysList.push(String(i));
        }
        return daysList;
    };
    console.log(enumerateDaysBetweenDates('6', '12'))

</script>

</html>

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崽崽的谷雨

漫漫前端路,摸爬滚打

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值