时刻时区 - 检测给定时间是否不明确

Abh*_*Rao 5 momentjs

有没有办法在momentjs中检查一个时代是否不明确?

America/Chicagozone 中, 2011-11-06 00:00不是模棱两可的,但2011-11-06 01:00可以是中部夏令时 ( CDT ) 或节约时间 ( CST )。

Mat*_*int 3

我认为这样的事情会起作用:

function hasAmbiguousWallTime(m) {
    var t = [60, -60, 30, -30];
    var a = t.map(function(x) { return moment(m).add(x, 'm').format('HH:mm'); });
    return a.indexOf(m.format('HH:mm')) > -1;
}
Run Code Online (Sandbox Code Playgroud)

例子:

hasAmbiguousWallTime(moment.tz("2011-11-06 01:00", "America/Chicago")) // true
hasAmbiguousWallTime(moment.tz("2011-11-06 00:00", "America/Chicago")) // false
Run Code Online (Sandbox Code Playgroud)

请注意,对于偏移量未发生 30 或 60 分钟变化的转换,这可能会失败,这种情况在历史上曾发生过。更好的实现将测试时刻时区数据中的已知转换点,或者针对本地导出的时刻扫描它们。也就是说,上述内容对于大多数现代用法来说已经足够了。