You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:27:03