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

如何解释JavaScript Date对象处理无时区ISO字符串的特殊时区行为?

现象解释与概念澄清

关于Date对象解析行为的原因

JavaScript的Date对象在解析无时区信息的带时间ISO 8601字符串时,遵循的是目标日期所在时段对应的本地时区规则,而非当前系统的即时时区状态。

以英国时区(对应标准时区标识Europe/London)为例,它本身包含一套全年的偏移规则:

  • 夏令时时段(通常是3月最后一个周日至10月最后一个周日)采用UTC+1的偏移,标注为BST(英国夏令时)
  • 冬令时时段采用UTC+0的偏移,标注为GMT(格林尼治标准时间)

所以你的代码示例里:

  • 解析2022-06-01T12:00:00时,6月处于英国夏令时时段,Date会按照该日期对应的BST规则解析,得到本地时间12:00(UTC+1)
  • 解析2022-01-01T12:00:00时,1月处于英国冬令时时段,不管当前系统(9月23日)正处于BST,Date依然会按照该日期本身对应的GMT规则解析,因此显示为GMT+0000

BST的属性界定

BST(英国夏令时)不是独立的时区,它是英国基础时区(GMT)的夏令时运行模式。真正的时区标识是Europe/London,这个时区包含了全年的偏移切换规则:夏令时启用时自动切换到UTC+1(对外标注为BST),冬令时启用时回到UTC+0(对外标注为GMT)

代码示例验证

new Date('2022-06-01T12:00:00') // Wed Jun 01 2022 12:00:00 GMT+0100 (British Summer Time)
new Date('2022-01-01T12:00:00') // Sat Jan 01 2022 12:00:00 GMT+0000 (Greenwich Mean Time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:50:43