如何使用Moment获取时区标准偏移量(忽略夏令时)
如何用Moment.js获取时区的标准偏移量(不含夏令时)
我之前也碰到过这个问题——默认用moment.tz("America/Edmonton").format('Z')确实会返回当前时间对应的偏移(夏令时期间就是-06:00),要拿到不含夏令时的标准偏移量,可以试试这两个靠谱的方法:
方法一:通过时区对象直接获取标准偏移
Moment Timezone的moment.tz.zone()方法可以拿到对应时区的元数据对象,里面包含了标准偏移的核心信息。我们可以利用它的utcOffset方法,传入0(对应Unix时间戳0,也就是1970年1月1日,这个时间点几乎所有时区都处于标准时间,不会触发夏令时规则)来获取标准偏移:
// 获取目标时区的元数据对象 const edmontonZone = moment.tz.zone("America/Edmonton"); // 获取标准偏移(单位:分钟) const standardOffsetMinutes = edmontonZone.utcOffset(0); // 转换为±HH:mm的格式 const standardOffset = moment().utcOffset(standardOffsetMinutes).format('Z'); console.log(standardOffset); // 输出 "-07:00"
这种方法的好处是不受当前日期影响,直接从时区定义中读取标准偏移,稳定性更高,适合通用场景。
方法二:构造一个处于标准时间的日期
如果不想操作时区对象,也可以直接指定一个该时区肯定处于标准时间的日期(比如北半球的1月1日,此时北美时区都是冬令时),再获取偏移:
// 选一个处于Edmonton标准时间的日期(比如1月1日) const standardOffset = moment.tz("2024-01-01", "America/Edmonton").format('Z'); console.log(standardOffset); // 输出 "-07:00"
需要注意的是,要确保选的日期确实在该时区的标准时间时段内:比如南半球的时区夏令时通常在12月左右,就要选6月的日期来获取标准偏移。
内容的提问来源于stack exchange,提问作者Majid
相关产品推荐
相关产品推荐

