如何在JavaScript中确定两个IANA时区是否相同



给定两个不同的IANA(又称" TZ数据库"或" Olson")时区,我该如何确定它们是否代表同一区域?

例如,Asia/KolkataAsia/Calcutta表示同一区域。

另一个示例,Africa/AsmaraAfrica/Asmera表示同一区域。

使用检测或猜测用户时区的API时,这些次要拼写差异很重要,因为然后不能简单地将字符串与以前存储的值进行比较,因为不同的实现返回了时区标识符的不同变化。

<</p>

完全支持Ecmascript国际化API的现代JavaScript实现,可以使用以下内容:

function areSameTimeZones(zone1, zone2) {
  var resolvedZone1 = Intl.DateTimeFormat(undefined, {timeZone: zone1})
                          .resolvedOptions().timeZone;
  var resolvedZone2 = Intl.DateTimeFormat(undefined, {timeZone: zone2})
                          .resolvedOptions().timeZone;
  return resolvedZone1 === resolvedZone2;
}

对于需要与较旧浏览器兼容的应用,可以利用MomentsZone:

function areSameTimeZones(zone1, zone2) {
  var z1 = moment.tz.zone(zone1);
  var z2 = moment.tz.zone(zone2);
  return z1.abbrs === z2.abbrs && z1.untils === z2.untils && z1.offsets === z2.offsets;
}

相关内容

  • 没有找到相关文章

最新更新