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

JavaScript中给指定日期加3天却实际加1个月的问题如何解决

错误原因
  • 月份参数索引错误:JavaScript的Date构造函数中月份是0索引计数,0代表1月,9代表10月。你代码中new Date(2021, 9, 14)实际生成的是2021年10月14日的日期对象,如果你预期的是9月14日,这里本身就相差了1个月。
  • 时间单位不匹配:Date.getTime()返回的是1970年1月1日以来的毫秒数,你定义的secondsInADay = 86400是一天对应的秒数,没有乘以1000转换为毫秒就直接相加,实际仅添加了4分19秒的时间,几乎没有改变日期数值。两个问题叠加后,最终输出结果看起来就像只加了1个月。
修复方案

方案1:修复原有代码的两个问题

var d = new Date(2021, 8, 14); // 要9月就传8,月份参数减1
var currentTime = d.getTime();
var daysToAdd = 3;
var secondsInADay = 86400;
// 秒转毫秒,乘以1000
var d = new Date(currentTime + daysToAdd * secondsInADay * 1000);
var year = d.getFullYear();
var month = ("0" + (d.getMonth() + 1)).slice(-2);
var day = ("0" + d.getDate()).slice(-2);
console.log('result is:' + year + '-' + month + '-' + day);
// 输出:result is:2021-09-17

方案2:更稳妥的日期计算方式

直接使用Date自带的setDate方法,无需手动计算时间戳,自动处理月份进位、夏令时、闰秒等特殊场景,出错概率更低:

var d = new Date(2021, 8, 14);
var daysToAdd = 3;
d.setDate(d.getDate() + daysToAdd); // 直接设置日期
var year = d.getFullYear();
var month = ("0" + (d.getMonth() + 1)).slice(-2);
var day = ("0" + d.getDate()).slice(-2);
console.log('result is:' + year + '-' + month + '-' + day);
// 输出:result is:2021-09-17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:03