Иудейский календарь относится к группе лунно-солнечных календарных систем, в которых длина месяца определяется лунным циклом, а корректировка относительно солнечного года выполняется с помощью вставочных (високосных) месяцев. В контексте локализации JavaScript и экосистемы CLDR (Unicode Common Locale Data Repository) он рассматривается как альтернативная календарная система, поддерживаемая на уровне локализованных данных и форматирования дат.
Основой системы является синодический месяц, равный приблизительно 29,53059 суток. Календарный месяц округляется до чередования 29 и 30 дней, формируя циклическую структуру:
Год формируется как последовательность месяцев, однако его длина не фиксирована и зависит от типа года:
Коррекция расхождения между лунным и солнечным циклами реализуется через 19-летний метонов цикл, в котором 7 лет считаются високосными.
Високосные годы в цикле:
Добавочный месяц называется Адар II, вставляется перед традиционным месяцем Адар в високосные годы.
Начальная точка отсчёта календаря определяется как 3761 год до н. э. (юлианский эквивалент), что соответствует традиционной дате сотворения мира в религиозной хронологии. В программных системах это приводит к необходимости работы с отрицательными или смещёнными эпохами при конвертации дат.
В JavaScript и CLDR календарь представляется как альтернативная система летоисчисления, параллельная григорианской.
CLDR определяет календарь как набор правил:
Для еврейского календаря используется идентификатор:
hebrewВ CLDR-данных присутствуют:
ca-hebrew — календарная системаСовременный JavaScript использует Intl.DateTimeFormat, который опирается на CLDR и позволяет явно задавать календарную систему:
const formatter = new Intl.DateTimeFormat('en-u-ca-hebrew', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
formatter.format(new Date());
Ключевой параметр:
ca-hebrew — переключение календаря на иудейскийПри этом внутренняя дата остаётся объектом Date в
григорианской системе, а преобразование выполняется на уровне
форматирования.
Библиотека Globalize работает поверх CLDR-данных и обеспечивает локализацию:
Globalize не реализует календарные алгоритмы напрямую, но использует данные CLDR и может работать с форматами дат через внешние механизмы (в частности, через совместимые API и предварительно загруженные CLDR-структуры).
Базовая схема загрузки CLDR:
Globalize.load(
require("cldr-data/supplemental/likelySubtags"),
require("cldr-data/supplemental/timeData"),
require("cldr-data/supplemental/weekData"),
require("cldr-data/main/he/ca-hebrew"),
require("cldr-data/main/he/numbers"),
require("cldr-data/main/he/units")
);
Globalize.locale("he");
Здесь подключается локаль he (иврит), которая включает
поддержку календарных структур.
При работе с датами Globalize опирается на форматирование, а не на трансформацию календарной системы. Это означает, что:
Пример форматирования через Globalize:
const Globalize = require("globalize");
const dateFormatter = Globalize.dateFormatter({
datetime: "long"
});
dateFormatter(new Date());
Фактическое отображение зависит от текущей локали и CLDR-данных.
При работе с календарём hebrew в контексте CLDR
учитываются специфические элементы:
Названия месяцев в ивритской локали:
Основная сложность при работе с календарями в JavaScript заключается в разделении уровней:
Поэтому преобразование между григорианским и еврейским календарём в чистом JavaScript не выполняется автоматически в Globalize и требует:
Intl с ca=hebrewCLDR определяет локализованные правила отображения чисел в датах. В еврейском календаре это включает:
Пример логики форматирования:
new Intl.DateTimeFormat('he-u-ca-hebrew', {
year: 'numeric',
month: 'numeric',
day: 'numeric'
}).format(new Date());
Globalize остаётся ориентированным на:
Поддержка альтернативных календарей реализуется не как отдельная вычислительная модель, а как часть:
Таким образом, еврейский календарь в этой экосистеме существует как представление данных, а не как независимый календарный движок.
При использовании Globalize и CLDR необходимо учитывать:
Эти ограничения определяют архитектурный подход: календарь рассматривается как слой представления поверх единого временного стандарта UTC.