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

JavaScript中toISOString方法返回错误日期的问题咨询

问题原因与解决办法

嘿,这个坑我之前踩过!咱们先拆解问题根源,再给你几个靠谱的解决办法:

为什么会出现日期差一天的情况?

核心原因是时区差异在搞鬼:

  • 当你用new Date("June 08, 2018")创建日期对象时,JavaScript会基于你的本地时区解析这个字符串。比如你身处东八区(UTC+8),这个日期对应的UTC时间其实是2018-06-07T16:00:00Z。
  • 而toISOString()方法的特性是:它会把日期对象转换为UTC标准时间的字符串格式输出。所以截取前10位时,自然就得到了UTC的日期2018-06-07,和你预期的本地日期差了一天。

解决办法

根据你的需求不同,有两种常用方案:

方案1:获取本地时区的YYYY-MM-DD格式日期

如果你的目标是得到本地时区的日期字符串,完全不用依赖toISOString(),可以手动拼接年、月、日:

function getLocalDateStr(date) {
  const year = date.getFullYear();
  // 月份是0开始的,所以要+1,再用padStart补零确保两位
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

const a = new Date("June 08, 2018");
console.log(getLocalDateStr(a)); // 输出 "2018-06-08"

方案2:将输入日期解析为UTC时间

如果你需要的是UTC标准的日期,那可以让Date构造函数直接解析UTC时间:

// 方法A:用Date.UTC构造(注意月份是0-based,5代表6月)
const a = new Date(Date.UTC(2018, 5, 8));
console.log(a.toISOString().slice(0, 10)); // 输出 "2018-06-08"

// 方法B:在日期字符串末尾加上UTC标识
const b = new Date("June 08, 2018 UTC");
console.log(b.toISOString().slice(0, 10)); // 输出 "2018-06-08"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:24