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

问题描述 投票:1回答:1

鉴于两种不同的IANA (aka "tz database" or "Olson") time zones,我如何确定它们是否代表相同的区域?

例如,Asia/KolkataAsia/Calcutta代表相同的区域。

另一个例子,Africa/AsmaraAfrica/Asmera代表相同的区域。

当使用detect or guess the user's time zone的API时,这些轻微的拼写差异很重要,因为人们不能简单地将字符串与先前存储的值进行比较,因为不同的实现返回时区标识符的不同变体。

javascript timezone
1个回答
3
投票

完全支持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;
}

对于需要与旧版浏览器兼容的应用程序,可以使用Moment-Timezone

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.