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
相关产品推荐
相关产品推荐

