有没有办法获得DST过渡的时间。例如,有一些奇怪的时区,有30分钟的过渡。我得到这个的另一种方法是获得标准和dst时间的utc偏移量,我可以减去这两个。
如果我做moment.tz('America / Chicago')._ z.offsets我可以访问大量的所有偏移量。但是我需要知道当前年份阵列中的哪个索引。
有什么想法?
答案 0 :(得分:2)
这将返回当前年份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);
}
这些是相对安全的测试日期,因为它们处于冬季中期和夏季中期 - 尽管这取决于北半球或南半球。在这两个日期,anywhere in the world不会发生DST转换。
您可能会看到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;
}
这种方法给出了 now 与下一次计划转换之间的偏差。请注意,转换还有其他原因而不仅仅是DST - 例如标准偏移更改。
另请注意,此替代方法不会限制到当前年份的时间。因此,如果计划在未来一年取消DST,它将反映在结果中。您可以更改此选项以针对上次转换进行测试,但这也会产生奇怪的结果,例如说America/Phoenix
有60分钟增量,因为Arizona experimented briefly with DST in 1967。
因此,在大多数情况下,第一种方法可能是最好的。