Node.js中使用Moment.js的while循环生成起止日期间日期数组的问题
生成起始日期到结束日期的日期数组解决方案
嘿,我来帮你搞定这个用Moment.js生成日期数组的问题!先看看你现有代码里的小问题,然后给你修正后的实现~
原代码的问题点
你当前的代码里,直接把startingMoment push到数组里,但Moment对象是可变的——每次调用add(1, 'days')都会修改同一个对象。这就导致最后数组里的所有元素其实都是指向同一个Moment实例,也就是循环结束后的那个最终日期,完全不是你想要的中间所有日期。
修正后的代码
我们只需要在push的时候克隆当前的Moment对象,避免后续修改影响数组里的元素:
// 先确保你已经安装并引入了moment const moment = require('moment'); const startDay = '2024-01-01'; // 替换成你的起始日期 const endDay = '2024-01-05'; // 替换成你的结束日期 const startDate = moment(startDay); const endDate = moment(endDay); const datesBetween = []; // 克隆起始日期,避免修改原始的startDate let currentMoment = startDate.clone(); while (currentMoment <= endDate) { // 每次push都克隆当前日期对象,保存独立副本 datesBetween.push(currentMoment.clone()); // 推进一天 currentMoment.add(1, 'days'); } console.log(datesBetween);
可选:生成字符串格式的日期数组
如果你的需求是得到字符串格式的日期(比如YYYY-MM-DD),可以在push的时候直接格式化:
datesBetween.push(currentMoment.format('YYYY-MM-DD'));
这样输出的数组就是["2024-01-01", "2024-01-02", ..., "2024-01-05"],在很多业务场景下会更实用。
内容的提问来源于stack exchange,提问作者Piotr Bryla
相关产品推荐
相关产品推荐

