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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:57:04