给定两个不同的IANA(又称" TZ数据库"或" Olson")时区,我该如何确定它们是否代表同一区域?
例如,Asia/Kolkata
和Asia/Calcutta
表示同一区域。
另一个示例,Africa/Asmara
和Africa/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;
}