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

JavaScript date.setDate特定日期异常:2024-03-10无法正确加一天

如何实现不受时区偏移(夏令时)影响的日期加一天操作?

你遇到的问题确实是夏令时导致的——2024年3月10日是部分地区(如美国)的夏令时切换日,当天凌晨2点会被调快至3点,使得本地时间这一天实际只有23小时。直接使用getDate()和setDate()时,方法基于本地时区计算,就会出现加1天后实际只增加了23小时、日期未推进的情况。

以下是两种可靠的解决方法:

方法一:使用UTC时间操作

UTC时间没有夏令时偏移,全程基于UTC的日期方法可以彻底规避这个问题:

(() => {
  let d = new Date("2024-03-10")
  console.log("current day", d.toISOString())
  // 改用UTC相关方法处理日期递增
  d.setUTCDate(d.getUTCDate() + 1)
  console.log("next day", d.toISOString())
})()

执行后会输出正确的结果:

current day 2024-03-10T00:00:00.000Z
next day 2024-03-11T00:00:00.000Z

getUTCDate()和setUTCDate()完全基于UTC时间轴计算日期,不受本地时区的夏令时调整影响。

方法二:基于本地年月日构造新日期

如果业务逻辑需要基于本地时区处理日期,可以直接提取当前日期的年、月、日,再构造下一天的日期:

(() => {
  let d = new Date("2024-03-10")
  console.log("current day", d.toLocaleDateString())
  // 获取本地时间的年、月、日
  const year = d.getFullYear()
  const month = d.getMonth()
  const day = d.getDate()
  // 直接构造下一天的日期,Date构造函数会自动处理时区调整
  const nextDay = new Date(year, month, day + 1)
  console.log("next day", nextDay.toLocaleDateString())
  console.log("next day ISO", nextDay.toISOString())
})()

这种方式绕开了直接修改原日期对象的时区偏移问题,让Date构造函数自行处理夏令时带来的时间变化,确保得到正确的下一天。

注意:不要直接添加86400000毫秒(一天的毫秒数)来实现加一天——夏令时切换当天的时长不是24小时,这种方法同样会出现错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:37:22