如何使用Moment.js生成过去31天的日期数组,现有代码运行异常原因是什么
问题原因
- 错误使用Moment.js方法:
moment().day(i)是用来设置/获取星期几的方法,参数合法范围为0(代表周日)~6(代表周六),你传入超出范围的数值时,Moment会自动按周偏移计算,完全不符合“按天获取历史日期”的需求。 - 日期计算逻辑错误:你基于当前月的日期值做减法的逻辑天然不支持跨月场景,比如当前为12月2日时,减31得到负数,无法对应到11月的日期,逻辑本身就不成立。
正确实现
要获取过去31天的日期数组,直接从当前日期开始逐天往前偏移即可,Moment提供了subtract方法专门用来做日期偏移计算,示例代码如下:
let labels = []; const popArray = () => { // 循环31次,依次往前偏移1~31天 for(let i = 31; i > 0; i--){ // subtract(i, 'days') 表示往前推i天 labels.push(moment().subtract(i, 'days').format('MM-DD')); } console.log(labels); } popArray();
如果需要包含当天的31天日期,调整循环范围即可:
// 包含当天的31天日期 for(let i = 30; i >= 0; i--){ labels.push(moment().subtract(i, 'days').format('MM-DD')); }
内容的提问来源于stack exchange,提问作者axiomatic
相关产品推荐
相关产品推荐

