西海岸时区下,带零时分秒的Date为何超前8小时?时差为何非7小时?
问题解答
一、两个Date实例时间不同的原因
JavaScript的Date构造函数对不同格式的日期字符串解析规则存在差异:
- 对于
new Date('2023-01-01')这种仅日期的ISO 8601格式字符串,会默认以UTC时区的0点解析该日期,再转换为你的本地时区显示。UTC的2023-01-01 0:00转换为太平洋标准时间(UTC-8)就是2022-12-31 16:00,这是第一个实例的结果。 - 对于
new Date('2023-01-01 0:0:0.000')这种带时分秒的非标准ISO格式字符串,会直接以你的本地时区的0点解析,因此得到的是太平洋标准时间2023-01-01 0:00。
二、时差显示为8小时而非7小时的原因
美国西海岸的太平洋时区(PT)分夏令时(PDT,UTC-7)和冬令时(PST,UTC-8):
- 夏令时通常覆盖每年3月至11月,冬令时覆盖11月至次年3月。
- 2023年1月1日处于冬令时时段,此时本地时区为UTC-8,所以显示的时差是GMT-0800,而非夏令时的GMT-0700。
验证代码
const d = new Date('2023-01-01'); const d2 = new Date('2023-01-01 0:0:0.000');
运行结果
Sat Dec 31 2022 16:00:00 GMT-0800 (Pacific Standard Time)
Sun Jan 01 2023 00:00:00 GMT-0800 (Pacific Standard Time)
内容的提问来源于stack exchange,提问作者Jeb50
相关产品推荐
相关产品推荐

