为何JavaScript中Date实例化的时区偏移会随年份变化?
为什么JavaScript中Date对象的时区偏移会随年份变化?
我身处比利时,当地UTC时区偏移为+1。在JavaScript中实例化Date对象时发现,1943年及之后的年份时区表现符合预期,但1943年之前的年份会出现不同结果。例如:
// 所有日期都是1月1日,仅年份不同 console.log(new Date(1900,0,1).toString()) // Mon Jan 01 1900 00:00:00 GMT+0000 (Central European Standard Time) console.log(new Date(1940,0,1).toString()) // Mon Jan 01 1940 00:00:00 GMT+0000 (Central European Standard Time) console.log(new Date(1941,0,1).toString()) // Wed Jan 01 1941 00:00:00 GMT+0200 (Central European Standard Time) console.log(new Date(1943,0,1).toString()) // Fri Jan 01 1943 00:00:00 GMT+0100 (Central European Standard Time) console.log(new Date(2013,0,1).toString()) // Tue Jan 01 2013 00:00:00 GMT+0100 (Central European Standard Time)
这是因为时区规则不是一成不变的,不同国家/地区会根据历史、政治或战争等因素调整本地时区的偏移和夏令时规则,JavaScript的Date对象会遵循操作系统或运行环境提供的时区数据库来解析不同年份的时区信息。
针对比利时的具体情况:
- 1940年及之前,比利时使用UTC+0时区,无夏令时调整,所以1900、1940年的日期显示GMT+0000。
- 1941年正值二战期间,比利时被占领后强制推行UTC+2时区规则,因此这一年的1月1日显示GMT+0200。
- 1943年后,比利时恢复UTC+1标准时区,后续逐步确立了现行的夏令时规则,所以1943及之后的年份表现符合预期的UTC+1偏移。
简言之,Date对象会依据对应年份的真实时区历史规则计算偏移,而非仅使用当前的时区设置。
内容的提问来源于stack exchange,提问作者anagels
相关产品推荐
相关产品推荐

