Работа с датами в JavaScript исторически связана с внутренним представлением времени в виде количества миллисекунд с начала эпохи Unix (1970-01-01T00:00:00Z). Однако при отображении дат в пользовательских интерфейсах используется международный стандарт ISO 8601, определяющий строгий формат записи даты и времени.
Ключевые особенности ISO 8601:
- для даты и :
для времениZ (UTC) или смещение
±HH:mmПримеры корректных ISO 8601 строк:
2026-05-272026-05-27T14:30:00Z2026-05-27T14:30:00+06:00В контексте JavaScript Intl API стандарт ISO 8601 является базовым ориентиром для входных и выходных данных, хотя форматирование происходит через локализованные правила.
Класс Intl.DateTimeFormat опирается на стандартизированные календарные и временные представления, обеспечивая преобразование внутренних значений в человеко-читаемые строки.
new Intl.DateTimeFormat('en-US').format(new Date());
Внутри реализации используется согласование с правилами ICU (International Components for Unicode), где ISO 8601 служит фундаментом для унифицированного представления времени.
Стандарт ISO 4217 определяет трёхбуквенные коды валют, используемые в международных финансовых системах и широко применяемые в JavaScript Intl API.
Примеры кодов:
В Intl API этот стандарт напрямую используется в Intl.NumberFormat при форматировании денежных значений.
new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD'
}).format(1234.5);
Важные свойства взаимодействия с ISO 4217:
1 234,50 € vs $1,234.50)Стандарт не только определяет код валюты, но и влияет на правила округления, минимальные единицы и отображение дробных частей.
Для локализации форматов используется стандарт ISO 3166, задающий коды стран:
US, DE,
KZUSA, DEU,
KAZВ Intl API чаще всего применяется alpha-2 формат в составе BCP 47 локалей:
en-USde-DEru-RUkk-KZЭти идентификаторы используются всеми основными форматировщиками:
Intl.DateTimeFormatIntl.NumberFormatIntl.CollatorIntl.RelativeTimeFormatПример:
new Intl.DateTimeFormat('de-DE').format(new Date());
Система локалей представляет собой комбинацию:
Хотя BCP 47 не является ISO стандартом, он объединяет несколько ISO систем в единый формат идентификаторов локалей.
Структура BCP 47:
ru, en,
deRU, US,
DECyrl, LatnПримеры:
ru-Cyrl-RUzh-Hans-CNsr-Latn-RSIntl API полностью опирается на BCP 47 при выборе локализации.
Intl API реализуется поверх библиотеки ICU (International Components for Unicode), которая агрегирует и применяет международные стандарты, включая ISO.
ICU обеспечивает:
Вся логика форматирования в JavaScript делегируется ICU, а Intl API выступает как интерфейс доступа.
Несмотря на использование ISO 8601 как базового стандарта, Intl API адаптирует вывод под локаль.
Пример различий:
en-US: 05/27/2026de-DE: 27.05.2026ja-JP: 2026/05/27ISO-формат остаётся внутренней моделью, но внешний вывод регулируется локалями.
Особенности:
new Intl.DateTimeFormat('en-GB', { timeStyle: 'short' }).format(new Date());
Intl API использует ISO-подобную модель для чисел через разделение:
Хотя это не прямое следование ISO 80000, поведение согласуется с международными соглашениями.
Примеры различий:
1,234.56 (en-US)1.234,56 (de-DE)1 234,56 (fr-FR)new Intl.NumberFormat('fr-FR').format(1234.56);
В сортировке строк используется Intl.Collator, который опирается на правила Unicode и ISO-совместимые языковые коды.
new Intl.Collator('sv-SE').compare('ä', 'z');
Различия сортировки:
ä как отдельную буквуКоллятор учитывает:
ISO 8601 определяет формат временных зон, который используется в JavaScript как базовая модель:
Z+03:00, -05:00Intl API интерпретирует временные зоны через IANA Time Zone Database, но вывод согласуется с ISO представлением.
new Intl.DateTimeFormat('en-US', {
timeZone: 'Europe/Berlin'
}).format(new Date());
Intl API функционирует на пересечении ISO стандартов и Unicode-экосистемы:
CLDR (Common Locale Data Repository) дополняет ISO, предоставляя:
Intl API выполняет нормализацию локалей к каноническому виду:
Примеры преобразований:
en-us → en-USzh-hant-tw → zh-Hant-TWsr-cyrl → sr-CyrlЭто обеспечивает:
Intl.getCanonicalLocales('en-us');
Несмотря на широкое применение ISO стандартов, Intl API имеет ряд ограничений:
Эти ограничения компенсируются обновлениями ICU и расширением CLDR.
ISO 8601 ориентирован на григорианский календарь, однако Intl API поддерживает альтернативные системы:
new Intl.DateTimeFormat('ar-SA-u-ca-islamic').format(new Date());
Такая модель сохраняет совместимость с ISO 8601 при внутреннем хранении времени, но расширяет представление за счёт локальных календарных систем.