JavaScript中给日期加7天出现1970日期异常,问题何在?
问题:为Date对象添加7天后得到1970年日期的原因及解决方法
问题场景
你通过jQuery UI Datepicker获取到了选中的日期:
let lastDate = $(`#search_legs_${newNumber - 1}_date`).datepicker().data("datepicker").selectedDates[0];
控制台输出的日期是:
Fri Jun 15 2018 02:00:00 GMT+0200 (CEST)
你想给这个日期加7天,于是尝试了这段代码:
const newDate = new Date(lastDate.getDate() +7); console.log(newDate);
结果控制台却输出了:
Thu Jan 01 1970 01:00:00 GMT+0100 (CET)
问题出在哪?
问题出在对getDate()返回值和new Date()参数的理解偏差:
lastDate.getDate()返回的是当月的日期号(比如这里是15),不是时间戳。- 当你用
new Date(22)(15+7=22)时,JavaScript会把这个数字当成毫秒级时间戳——也就是从1970年1月1日UTC开始计算的22毫秒,转换成本地时间自然就是1970年的那个日期了。
正确的解决方法
你需要先复制原有的Date对象,再用setDate()方法来修改日期,这个方法会自动处理月份/年份的进位逻辑:
// 先复制原日期对象,避免修改原有的lastDate const newDate = new Date(lastDate); // 调用setDate,传入原日期的日数加7 newDate.setDate(lastDate.getDate() + 7); console.log(newDate);
这样运行后,你就能得到正确的日期:Fri Jun 22 2018 02:00:00 GMT+0200 (CEST)。
另外补充一点:setDate()非常智能,如果加的天数超过当月的总天数,它会自动跳到下一个月(比如6月25日加7天,会自动变成7月2日),完全不用你手动处理月份切换的问题~
内容的提问来源于stack exchange,提问作者Balance
相关产品推荐
相关产品推荐

