Еврейский календарь

Иудейский календарь относится к группе лунно-солнечных календарных систем, в которых длина месяца определяется лунным циклом, а корректировка относительно солнечного года выполняется с помощью вставочных (високосных) месяцев. В контексте локализации JavaScript и экосистемы CLDR (Unicode Common Locale Data Repository) он рассматривается как альтернативная календарная система, поддерживаемая на уровне локализованных данных и форматирования дат.

Основой системы является синодический месяц, равный приблизительно 29,53059 суток. Календарный месяц округляется до чередования 29 и 30 дней, формируя циклическую структуру:

  • короткие месяцы: 29 дней
  • длинные месяцы: 30 дней

Год формируется как последовательность месяцев, однако его длина не фиксирована и зависит от типа года:

  • обычный год: 12 месяцев
  • високосный год: 13 месяцев

Коррекция расхождения между лунным и солнечным циклами реализуется через 19-летний метонов цикл, в котором 7 лет считаются високосными.

Високосные годы в цикле:

  • 3, 6, 8, 11, 14, 17, 19

Добавочный месяц называется Адар II, вставляется перед традиционным месяцем Адар в високосные годы.

Календарная эпоха и отсчёт времени

Начальная точка отсчёта календаря определяется как 3761 год до н. э. (юлианский эквивалент), что соответствует традиционной дате сотворения мира в религиозной хронологии. В программных системах это приводит к необходимости работы с отрицательными или смещёнными эпохами при конвертации дат.

В JavaScript и CLDR календарь представляется как альтернативная система летоисчисления, параллельная григорианской.


CLDR и представление еврейского календаря

CLDR определяет календарь как набор правил:

  • длины месяцев
  • порядок месяцев
  • правила високосности
  • локализованные названия
  • форматы отображения дат

Для еврейского календаря используется идентификатор:

  • hebrew

В CLDR-данных присутствуют:

  • ca-hebrew — календарная система
  • локализованные имена месяцев
  • правила форматирования дат
  • числовое представление года и месяца

Работа с календарями в JavaScript-экосистеме

Современный 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-данных и обеспечивает локализацию:

  • чисел
  • дат
  • валют
  • сообщений

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 опирается на форматирование, а не на трансформацию календарной системы. Это означает, что:

  • исходный объект даты остаётся григорианским
  • локализация влияет на отображение
  • календарные названия берутся из CLDR

Пример форматирования через Globalize:

const Globalize = require("globalize");

const dateFormatter = Globalize.dateFormatter({
  datetime: "long"
});

dateFormatter(new Date());

Фактическое отображение зависит от текущей локали и CLDR-данных.


Особенности еврейского календаря в локализации

При работе с календарём hebrew в контексте CLDR учитываются специфические элементы:

  • наличие 12/13 месяцев
  • различие длины года (приблизительно 353–385 дней)
  • смещение начала суток (сутки начинаются вечером)
  • нумерация лет от традиционной эпохи

Названия месяцев в ивритской локали:

  • Тишрей
  • Хешван
  • Кислев
  • Тевет
  • Шват
  • Адар / Адар II
  • Нисан
  • Ияр
  • Сиван
  • Таммуз
  • Ав
  • Элул

Проблематика преобразования дат

Основная сложность при работе с календарями в JavaScript заключается в разделении уровней:

  • хранение даты — всегда григорианское (Unix epoch)
  • отображение — может быть любым календарём
  • календарные вычисления — требуют отдельной модели

Поэтому преобразование между григорианским и еврейским календарём в чистом JavaScript не выполняется автоматически в Globalize и требует:

  • либо использования Intl с ca=hebrew
  • либо сторонних библиотек календарных вычислений
  • либо серверной логики

Форматирование числовых представлений года и месяца

CLDR определяет локализованные правила отображения чисел в датах. В еврейском календаре это включает:

  • отображение года в локальной системе счисления
  • локализацию названий месяцев
  • форматирование порядка элементов даты

Пример логики форматирования:

new Intl.DateTimeFormat('he-u-ca-hebrew', {
  year: 'numeric',
  month: 'numeric',
  day: 'numeric'
}).format(new Date());

Связь Globalize и альтернативных календарей

Globalize остаётся ориентированным на:

  • стандартизацию форматов
  • поддержку CLDR-локалей
  • единый API для интернационализации

Поддержка альтернативных календарей реализуется не как отдельная вычислительная модель, а как часть:

  • локализационных данных
  • правил форматирования
  • интеграции с ECMAScript Internationalization API

Таким образом, еврейский календарь в этой экосистеме существует как представление данных, а не как независимый календарный движок.


Ограничения при работе с календарными системами

При использовании Globalize и CLDR необходимо учитывать:

  • отсутствие встроенной конверсии между календарями
  • зависимость от Intl в современных средах
  • невозможность арифметики дат в альтернативной системе без внешних библиотек
  • различие между визуальным форматом и внутренним временем

Эти ограничения определяют архитектурный подход: календарь рассматривается как слой представления поверх единого временного стандарта UTC.