为什么JavaScript在特定年月创建的Date对象会返回不同时区?
为什么JavaScript在处理不同日期时会返回不一致的时区?

核心原因
你观察到的差异并非JavaScript处理逻辑异常,而是巴西利亚时区的夏令时规则导致的正常表现:
- 巴西利亚所在时区历史上长期实行夏令时制度:夏令时生效时段时钟会拨快1小时,时区偏移从标准的GMT-0300变为GMT-0200,非夏令时时段恢复标准偏移。
- 你测试的两个日期刚好落在不同的时段:
- 2021年11月18日属于巴西利亚标准时间时段,对应偏移为GMT-0300
- 1991年2月15日属于当年巴西利亚夏令时生效时段,对应偏移为GMT-0200
JavaScript的Date对象在生成本地化时间字符串时,会自动调用系统内置的时区历史规则,计算对应日期的实际时区偏移,因此不同日期的输出会出现偏移差异。
你用于验证的测试代码如下:
const a = new Date() console.log(a) // Thu Nov 18 2021 10:14:12 GMT-0300 (Horário Padrão de Brasília) const b = new Date(1991, 1, 15) console.log(b) // Fri Feb 15 1991 00:00:00 GMT-0200 (Horário de Verão de Brasília)
内容的提问来源于stack exchange,提问作者v1d3rm3
相关产品推荐
相关产品推荐

