IANA Time Zone Database (также известная как tz database, tzdata или
Olson database) представляет собой глобально используемый набор данных,
определяющий правила расчёта времени для всех известных временных зон
мира. В контексте JavaScript и Intl API именно эта база
является фундаментом, на котором строятся операции форматирования дат и
времени с учётом локальных особенностей регионов.
База поддерживается сообществом и координируется организацией IANA (Internet Assigned Numbers Authority), что обеспечивает её актуальность и согласованность с изменениями политических решений в странах: переходами на летнее время, изменениями часовых поясов, переименованиями зон и корректировками исторических данных.
Идентификаторы IANA имеют строгую иерархическую структуру, обычно формата:
Region/City
Примеры:
Europe/BerlinAsia/TokyoAmerica/New_YorkPacific/AucklandКлючевые особенности структуры:
/Такой подход исключает двусмысленность, в отличие от простых смещений
вида UTC+3, которые не учитывают исторические и
политические изменения.
Форматы вроде UTC+2 или GMT+5 не отражают
динамическую природу времени. Они:
IANA идентификаторы решают эти проблемы за счёт хранения не только текущего смещения, но и полного набора правил изменения времени во времени (time transition rules).
База данных состоит из набора текстовых файлов, описывающих:
Основные категории данных:
Zone definitions Описывают базовую временную зону и её стандартное смещение.
Rule definitions Содержат правила перехода на летнее время:
Link entries Используются для создания альтернативных имён одной и той же зоны.
Пример логической связи:
Asia/Calcutta → Asia/Kolkata (современное
имя)IANA база хранит не только текущие значения, но и исторические изменения, что критически важно для корректной работы с датами в прошлом.
Пример:
Это означает, что одна и та же дата в разные исторические периоды интерпретируется по-разному в зависимости от правил, действовавших в тот момент.
В JavaScript работа с временными зонами реализуется через
Intl и опирается на системную или встроенную копию IANA
базы.
Основной механизм — Intl.DateTimeFormat:
const formatter = new Intl.DateTimeFormat('ru-RU', {
timeZone: 'Europe/Moscow',
dateStyle: 'full',
timeStyle: 'long'
});
formatter.format(new Date());
Здесь значение Europe/Moscow напрямую соответствует IANA
идентификатору.
Ключевые особенности интеграции:
Большинство JS-движков (V8, SpiderMonkey, JavaScriptCore) используют ICU (International Components for Unicode), который содержит копию tz database.
ICU выполняет:
Таким образом, Intl API является тонкой обёрткой над
ICU, который, в свою очередь, использует tz database.
При передаче строки в параметр timeZone выполняется
строгая проверка:
Region/CityНекорректные значения приводят к исключению
RangeError.
Пример:
new Intl.DateTimeFormat('en-US', {
timeZone: 'Europe/Berlin'
});
Некорректный вариант:
new Intl.DateTimeFormat('en-US', {
timeZone: 'Berlin'
}); // ошибка
Одной из ключевых особенностей IANA базы является моделирование переходов DST (Daylight Saving Time).
Каждая зона может содержать:
Например:
При этом правила могут меняться исторически:
JavaScript-движок автоматически применяет эти правила в зависимости
от даты объекта Date.
IANA база содержит систему синонимов (links), позволяющую поддерживать совместимость.
Примеры:
US/Eastern → America/New_YorkAsia/Calcutta → Asia/KolkataEtc/UTC → UTCЭто позволяет сохранять обратную совместимость со старыми системами, не нарушая единую модель данных.
Особый класс идентификаторов — Etc/*.
Их особенность заключается в инвертированной логике знаков:
Etc/GMT+3 означает UTC−3Etc/GMT-3 означает UTC+3Такое поведение исторически связано с POSIX-стандартом и часто вызывает путаницу при прямом использовании.
В Intl API предпочтительнее использовать:
UTCEurope/...,
Asia/...)IANA tz database регулярно обновляется. Причины обновлений:
Обновления распространяются через:
В результате одно и то же приложение может по-разному интерпретировать дату в зависимости от версии системных данных.
Использование IANA базы приводит к важному эффекту: вычисление времени становится зависимым от версии данных.
Это означает:
По этой причине в критических системах часто сохраняется:
IANA идентификаторы не эквивалентны фиксированным смещениям.
Пример различий:
UTC+3 — фиксированное смещениеEurope/Moscow — правило, которое может меняться
исторически (включая отмену DST)При использовании:
new Intl.DateTimeFormat('en-US', {
timeZone: 'Europe/Moscow'
});
движок учитывает не только текущее смещение, но и все исторические переходы, связанные с этой зоной.
База данных не ограничивается странами. Она учитывает:
Это позволяет корректно моделировать даже малые географические различия во времени.
IANA tz database является частью более широкой экосистемы стандартов:
Intl)Вместе эти компоненты обеспечивают единообразную работу времени в браузерах, серверах и мобильных средах.
При передаче строки, отсутствующей в базе IANA, происходит:
Это подчёркивает строгую зависимость Intl API от
корректности идентификаторов временных зон.
Несмотря на изменения политических правил, идентификаторы IANA стремятся к стабильности:
Это обеспечивает долгосрочную совместимость программного кода,
использующего Intl API.