javascript - 如何从 MomentJS 获取 DST 金额

标签 javascript momentjs

有没有办法获取 DST 转换的时间量。例如,有一些奇怪的时区有 30 分钟的过渡。我得到这个的另一种方法是获取标准时间和夏令时的 utc 偏移量,然后我可以将两者相减。

如果我执行 moment.tz('America/Chicago')._z.offsets 我可以访问所有偏移量的大数组。但是我需要知道数组中的哪个索引是当前年份的。

有什么想法吗?

最佳答案

这将返回当年 1 月 1 日和 6 月 1 日之间 UTC 偏移量的当前差异 - 这可能就是您正在寻找的内容:

function getDSTBias(tz) {
    var janOffset = moment.tz({month: 0, day: 1}, tz).utcOffset();
    var junOffset = moment.tz({month: 5, day: 1}, tz).utcOffset();
    return Math.abs(junOffset - janOffset);
}

这些是测试相对安全的日期,因为它们是在仲冬和仲夏——尽管这取决于北半球或南半球。不会发生 DST 转换 anywhere in the world在这两个日期。

您可能会看到其他建议 7 月 1 日的代码,但是 DST weirdness in Morocco可以将 7 月 1 日定为标准时间日期。

如果您不喜欢硬编码日期的想法,这里有另一种方法:

function getOffsetDelta(tz) {
    var z = moment.tz.zone(tz);
    var i = z._index(moment());
    return i < z.offsets.length-1 ? Math.abs(z.offsets[i] - z.offsets[i+1]) : 0;
}

此方法给出了现在与下一个计划转换之间的偏移量差异。请注意,除了 DST 之外,还有其他原因导致转换 - 例如标准偏移量更改。

另请注意,这种替代方法不会将时间限制为当前年份。因此,如果计划在未来一年取消 DST,则会反射(reflect)在结果中。您可以更改此设置来测试最后转换,但这也会产生奇怪的结果,例如说America/Phoenix有60分钟的增量,因为Arizona experimented briefly with DST in 1967 .

因此,在大多数情况下,第一种方法可能是最好的。

关于javascript - 如何从 MomentJS 获取 DST 金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978494/

相关文章:

javascript - Meteor:两种类型的用户,如何处理复杂的 UserAccounts?

javascript - Firefox 中使用 .toLocaleString() 和 moment.js 的日期无效

javascript - Moment js日期格式问题

javascript - momentjs 并转换为 unix 给出了错误的日期

javascript - Blazor 服务器应用无法访问子项目的静态内容

javascript - 如何使回车键作为输入选项卡并在 angularjs 中找到按钮时提交?

javascript - 在 mac 上找不到 Angular protractor/cli.js 文件被告知检查我如何安装 Protractor

javascript - 如何将变量从链接传递到表单

javascript - 如何在 javascript 中获取今天、昨天或日期名称

javascript - Moment.js 设置服务器的基准时间