You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:48:59