В Intl.DateTimeFormat календарная система задаётся через
параметр calendar, который входит в набор опций
options либо в расширенный BCP 47-идентификатор локали.
Еврейский календарь активируется значением:
{ calendar: "hebrew" }
Либо через Unicode extension в строке локали:
"he-IL-u-ca-hebrew"
Ключевой момент заключается в том, что форматирование даты остаётся стандартным с точки зрения API, но все вычисления календарных компонентов (год, месяц, день) переводятся в систему отсчёта, основанную на традиционном еврейском календаре.
Еврейский календарь является лунно-солнечным, где месяцы основаны на лунных циклах, а годы корректируются солнечными вставками (эмболисмические годы).
Главное отличие от григорианского календаря:
В JavaScript это отражается исключительно в отображении значений, вычисления остаются абстрагированными внутри движка.
const date = new Date("2026-05-27");
const formatter = new Intl.DateTimeFormat("he-IL-u-ca-hebrew", {
year: "numeric",
month: "long",
day: "numeric"
});
formatter.format(date);
Форматирование возвращает строку, где:
Еврейский календарь включает следующие месяцы:
В високосные годы добавляется дополнительный месяц — Адар I и Адар II, что создаёт особую структуру отображения при форматировании дат.
Локаль he-IL-u-ca-hebrew задаёт не только календарь, но
и направление текста и региональные настройки. Однако сам
Intl.DateTimeFormat не изменяет язык автоматически при
указании календаря.
Пример:
new Intl.DateTimeFormat("en-US-u-ca-hebrew", {
month: "long",
year: "numeric"
}).format(new Date());
В результате названия месяцев могут отображаться на английском, но в структуре еврейского календаря.
Год в еврейском календаре существенно отличается от григорианского.
При использовании numeric или 2-digit:
const f = new Intl.DateTimeFormat("he-IL-u-ca-hebrew", {
year: "numeric"
});
возвращается значение вида:
Это важно учитывать при:
JavaScript не реализует календарные алгоритмы самостоятельно в пользовательском коде. Вместо этого используется ICU (International Components for Unicode), где:
Таким образом, Intl работает как слой отображения поверх
универсального времени.
Еврейский календарь не изменяет стандартную семидневную структуру недели. Однако локаль влияет на:
new Intl.DateTimeFormat("he-IL-u-ca-hebrew", {
weekday: "long"
}).format(new Date());
Результат зависит от локализации языка, но не от календарной системы.
Через Intl.Locale можно явно зафиксировать
календарь:
const locale = new Intl.Locale("he-IL", {
calendar: "hebrew"
});
locale.toString();
Результат:
"he-IL-u-ca-hebrew"
Это позволяет централизованно управлять параметрами локали без ручного формирования строки расширений.
Основные опции Intl.DateTimeFormat, влияющие на
отображение еврейского календаря:
yearmonthdayweekdayeradateStyletimeStyleПример с полным стилем:
new Intl.DateTimeFormat("he-IL-u-ca-hebrew", {
dateStyle: "full"
}).format(new Date());
Стили (full, long, medium,
short) автоматически адаптируют вывод под выбранную
календарную систему.
В еврейском календаре високосные годы определяются 19-летним циклом Метона. Это приводит к:
В Intl это не требует ручной обработки — движок
автоматически корректирует отображение.
Важно понимать, что Intl.DateTimeFormat не изменяет сам
объект Date.
const d = new Date();
d.getFullYear(); // всегда григорианский год
Еврейский календарь применяется только на уровне вывода:
Еврейский календарь использует собственную систему эпохи:
new Intl.DateTimeFormat("he-IL-u-ca-hebrew", {
year: "numeric",
era: "short"
}).format(new Date());
Поле era может возвращать обозначения, связанные с
традиционной системой летоисчисления, хотя поведение зависит от
реализации ICU.
Реализация зависит от:
Возможные различия:
dateStyleЕврейский календарь через Intl используется в системах,
где требуется:
При этом важно, что API не предоставляет прямого доступа к конвертации дат между календарями — только к отображению.
Несмотря на поддержку, существуют ограничения:
Intl остаётся системой форматирования, а не календарной логикой.