为何将日期转换为UTC时间时有时减1小时,有时减2小时?
为什么日期转UTC时有时减1小时,有时减2小时?
核心原因是**夏令时(DST)**和日期字符串解析的时区规则在起作用:
夏令时带来的时区偏移变化
很多实行夏令时的地区,冬令时和夏令时的UTC偏移量不同。比如欧洲中部时间(CET/CEST):冬令时是UTC+1,夏令时切换为UTC+2。- 用
new Date()获取当前时间时,如果当前处于夏令时,本地时间比UTC快2小时,toISOString()转UTC时就会减去2小时;如果是冬令时,本地时间比UTC快1小时,转UTC就只减1小时。 - 你例子里的
2023-01-02属于冬令时时段,所以new Date("2023-01-02 22:00")对应的本地时区偏移是UTC+1,转UTC自然只减1小时。
- 用
日期字符串的解析规则
像"2023-01-02 22:00"这种带空格的日期格式,JS引擎会默认按本地时区解析,而不是UTC。所以它会被当作你本地时区的2023年1月2日22点,再按照当时的时区偏移计算UTC时间。
实际代码对比示例:
// 假设当前处于夏令时(本地时区UTC+2) console.log(new Date().toISOString()); // 输出比当前本地时间少2小时的UTC时间 // 2023-01-02处于冬令时(本地时区UTC+1) console.log(new Date("2023-01-02 22:00").toISOString()); // 输出"2023-01-02T21:00:00.000Z",比输入时间少1小时
内容的提问来源于stack exchange,提问作者learncode
相关产品推荐
相关产品推荐

