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

JavaScript不同日期格式构造Date实例的时间差异原因问询

JavaScript中不同日期字符串解析的时间差异原因

在JavaScript中,使用new Date("2023-11-1")无法生成当天起始时间的实例,但new Date("2023/11/01")却可以。测试环境为Firefox 119.0.1(64位)、Ubuntu 22.04。以下是测试代码及结果:

console.log(new Date("2023-11-01"))
// 输出: Date Wed Nov 01 2023 01:00:00 GMT+0100 (Central European Standard Time)

console.log(new Date(Date.UTC(2023, 10, 1))) // 注:原代码月份参数11为笔误,修正为10对应11月
// 输出: Date Wed Nov 01 2023 01:00:00 GMT+0100 (Central European Standard Time)

console.log(new Date("2023/11/01"))
// 输出: Date Wed Nov 01 2023 00:00:00 GMT+0100 (Central European Standard Time)

console.log(new Date(2023, 10, 1)) // 注:原代码月份参数11为笔误,修正为10对应11月
// 输出: Date Wed Nov 01 2023 00:00:00 GMT+0100 (Central European Standard Time)

console.log(new Date("November 1, 2023"))
// 输出: Date Wed Nov 01 2023 00:00:00 GMT+0100 (Central European Standard Time)

这种差异是ECMAScript标准明确规定的行为,不是bug,核心原因在于不同格式的日期字符串触发了不同的解析逻辑:

  • YYYY-MM-DD(ISO 8601简化格式):
    标准规定,不带时区标识的ISO格式字符串会被解析为UTC时间的当天零点,随后转换为本地时区显示。你的本地时区是GMT+0100,UTC的11月1日零点加上1小时,就得到了本地时间的11月1日01:00,和测试结果一致。另外Date.UTC()方法本身生成的就是UTC时间戳,传给new Date()后同样会转换为本地时区,因此结果和new Date("2023-11-01")一致。

  • YYYY/MM/DD或英文月份格式(非ISO格式):
    这类字符串会直接被解析为本地时区的当天零点,所以显示为本地时间的11月1日00:00。同理,new Date(year, month, day)构造函数的参数默认基于本地时区,结果也是本地零点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:14:59