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

JavaScript循环使用setDate累加日期输出异常的原因排查

异常原因

导致代码输出异常的核心有两个错误点:

  • 第一,new_date初始化时用new Date()获取的是代码运行时的当前系统时间,初始年月不是你指定的2021年9月。setDate()方法只会修改日期对象的「日」部分,年月默认保留当前对象的原有值,所以你第一次输出的月份就是运行代码时的当前月份(从你的输出看运行时是10月),而非预期的9月。
  • 第二,setDate()会自动处理日期溢出,且修改的是当前日期对象本身的年月信息。你每轮循环都在已经被修改过年月的new_date对象上执行setDate(my_date.getDate() + i),比如当new_date已经被改为11月时,你传入27+6=33,11月只有30天,33天溢出后就会自动跳转到12月3日,后续循环的溢出会不断累加,就出现了跨多月跳转的问题。
修复方案

你只需要把日期的初始基准固定为你指定的2021-09-27,每次加天数都基于初始基准计算即可,修正后代码如下:

var my_date = new Date('2021-09-27');

for(var i=0; i<10; i++) {
  // 每次都基于初始日期新建对象,避免修改基准值
  var current_date = new Date(my_date);
  current_date.setDate(my_date.getDate() + i);
  console.log(current_date.toISOString());
}

也可以直接通过时间戳累加计算,逻辑更简洁:

var my_date = new Date('2021-09-27');
const ONE_DAY_TIMESTAMP = 24 * 60 * 60 * 1000;

for(var i=0; i<10; i++) {
  console.log(new Date(my_date.getTime() + i * ONE_DAY_TIMESTAMP).toISOString());
}

内容的提问来源于stack exchange,提问作者RyanIs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:27:04