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

为何JavaScript中new Date().toISOString()对同一日期输出不同结果?

为什么JavaScript中同一日期调用toISOString()会得到不同输出?

问题里的两种Date创建方式,本质是采用了不同的时区基准,导致最终转成UTC格式的toISOString()输出不一样:

  • 字符串参数构造new Date("2023-11-26")
    当传入YYYY-MM-DD格式的字符串时,JavaScript会默认把这个日期解析为UTC时区的00:00:00。这个Date实例本身就对应UTC时间的2023年11月26日零点,调用toISOString()自然输出"2023-11-26T00:00:00.000Z"(Z代表UTC时区)。

  • 数字参数构造new Date(2023, 11-1, 26)
    这种传入年、月、日的方式,JavaScript会基于当前运行环境的本地时区来创建日期。比如你的本地时区是UTC-3,本地时间2023年11月26日00:00对应的UTC时间就是2023年11月25日21:00。而toISOString()的作用就是把Date实例转成UTC时区的ISO格式字符串,所以最终输出就是"2023-11-25T21:00:00.000Z"。

另外注意:JavaScript的月份参数是0-based(从0开始计数),所以11-1对应的是11月,这点是正确的,不影响日期的本地时区解析。

示例代码验证:

console.log(new Date("2023-11-26").toISOString())
// "2023-11-26T00:00:00.000Z"

console.log(new Date(2023, 11-1, 26).toISOString())
// "2023-11-25T21:00:00.000Z"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:52:07