如何在Node.js中获取时区RAW Offset?现有代码输出错误
解决moment-timezone获取标准时区偏移(raw_offset)的问题
你当前使用utcOffset()得到的是当前时间的实际时区偏移,包含夏令时的调整,这就是它和worldtimeapi返回的raw_offset(标准时区偏移,不含夏令时)不一致的原因。
要获取对应时区的标准偏移(即raw_offset),可以借助moment-timezone的时区对象来实现:
const moment = require("moment-timezone"); let timezone = "Europe/Warsaw"; // 获取目标时区的时区规则对象 let tzZone = moment.tz.zone(timezone); // 获取标准偏移(单位为分钟,转换为秒需乘以60) let timezone_raw = tzZone.utcOffset() * 60; console.log(timezone_raw); // Europe/Warsaw的raw_offset为3600,与worldtimeapi返回值一致
关键说明
moment.tz.zone(timezone)返回的是对应时区的规则对象,包含该时区的标准偏移、夏令时切换规则等信息。- 该时区对象的
utcOffset()方法返回的是标准时间下的固定偏移(单位:分钟),不会受夏令时影响,对应worldtimeapi中的raw_offset(单位:秒,所以需要乘以60转换)。 - 你之前使用的moment实例的
utcOffset(),返回的是当前时间点该时区的实际偏移,会随夏令时周期变化,因此无法直接得到raw_offset。
内容的提问来源于stack exchange,提问作者Bootloader Project
相关产品推荐
相关产品推荐

