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

标签 javascript timezone

给定两个不同的 IANA (aka "tz database" or "Olson") time zones ,如何确定它们是否代表同一区域?

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

再举个例子,Africa/AsmaraAfrica/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;
}

关于javascript - 如何确定两个 IANA 时区在 JavaScript 中是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55110347/

相关文章:

javascript - 在 Firefox WebExtension 中使用 sdk/tabs 时出现引用错误

javascript - 我的 Node forever 插件不工作

python - 列出过去 x 年夏令时的开始和结束时间

r - R 中的润滑错误

IOS:如何检测用户在后台获取中更改的时区

javascript - 如何在 react 中使用键/值对象

javascript - Angular 变量未在 HTML 中显示

mysql - 了解 global.time_zone 的结果

postgresql - 在 'COPY .. TO ..' 期间将给定时区的时间戳转换为本地时间

php - 表单验证-安全