鉴于两种不同的IANA (aka "tz database" or "Olson") time zones,我如何确定它们是否代表相同的区域?
例如,Asia/Kolkata
和Asia/Calcutta
代表相同的区域。
另一个例子,Africa/Asmara
和Africa/Asmera
代表相同的区域。
当使用detect or guess the user's time zone的API时,这些轻微的拼写差异很重要,因为人们不能简单地将字符串与先前存储的值进行比较,因为不同的实现返回时区标识符的不同变体。
完全支持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;
}