Как определить, совпадают ли два часовых пояса IANA в JavaScript? - PullRequest
1 голос
/ 12 марта 2019

Учитывая два разных IANA (он же "tz database" или "Olson") часовых пояса , как я могу определить, представляют ли они одну и ту же зону?

Например, Asia/Kolkata и Asia/Calcutta представляют одну и ту же зону.

Другой пример, Africa/Asmara и Africa/Asmera представляют одну и ту же зону.

Эти второстепенныеРазличия в правописании имеют значение при использовании API, которые обнаруживают или угадывают часовой пояс пользователя , поскольку тогда нельзя просто сравнить строки с ранее сохраненным значением, потому что разные реализации возвращают разные вариации идентификатора часового пояса.

1 Ответ

3 голосов
/ 12 марта 2019

Современные реализации JavaScript, которые полностью поддерживают интерфейс ECMAScript Internationalization API, могут использовать следующее:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...