В Intl API календарная система является частью международной
локализации и управляется через Unicode Extension u-ca
(calendar). Поддержка исламского календаря реализуется через несколько
вариантов алгоритмов, каждый из которых отражает разные методы
астрономического или административного расчёта.
Календарь задаётся либо через опцию calendar в
Intl.DateTimeFormat, либо через расширение локали:
new Intl.DateTimeFormat('ar-SA', {
calendar: 'islamic'
});
или
new Intl.DateTimeFormat('ar-SA-u-ca-islamic');
Календарная система влияет исключительно на представление даты, не изменяя внутреннее представление времени в JavaScript, которое остаётся в формате Unix Epoch (UTC-based timestamp).
Поддержка включает несколько спецификаций исламского календаря, различающихся методом вычисления начала месяцев.
Классическая табличная система, основанная на арифметической модели с фиксированной длиной месяцев. Используется как приближённая модель без строгой привязки к наблюдениям луны.
new Intl.DateTimeFormat('en-u-ca-islamic', {
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(new Date());
Наиболее распространённый вариант в современных локализациях, особенно в Саудовской Аравии. Основан на наблюдениях и расчётах, используемых для официального календаря Хиджры.
new Intl.DateTimeFormat('ar-SA-u-ca-islamic-umalqura', {
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(new Date());
Арифметическая модель с фиксированным циклом, применяемая для вычислительных задач и программных сценариев, где требуется предсказуемость.
new Intl.DateTimeFormat('en-u-ca-islamic-civil', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
Табличная версия с иной системой распределения високосных лет. Используется реже и чаще встречается в исторических или специализированных системах.
new Intl.DateTimeFormat('en-u-ca-islamic-tbla');
Региональная система, применяемая в некоторых административных реализациях календаря Саудовской Аравии.
new Intl.DateTimeFormat('ar-u-ca-islamic-rgsa');
При использовании исламского календаря происходит трансформация григорианской даты в соответствующее представление Хиджры. Внутренний timestamp остаётся неизменным.
const date = new Date('2026-05-27T00:00:00Z');
const fmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
fmt.format(date);
Результат зависит от локали и выбранного алгоритма календаря, но структура всегда включает:
Unicode Extension u-ca может комбинироваться с локалью
языка, влияя на формат чисел, порядок вывода и названия месяцев.
Примеры комбинаций:
'ar-SA-u-ca-islamic-umalqura'
'en-u-ca-islamic'
'fr-u-ca-islamic-civil'
Локаль определяет:
Intl.DateTimeFormat позволяет гибко управлять выводом элементов исламского календаря.
new Intl.DateTimeFormat('ar-u-ca-islamic-umalqura', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
});
Поддерживаемые поля:
yearmonthdayweekdayhour, minute, second (не
зависят от календаря, но отображаются в контексте локали)Исламский календарь основан на лунных циклах, поэтому:
Разные исламские страны могут использовать разные алгоритмы расчёта начала месяца, что отражается в различиях между:
islamic-umalquraislamic-civilislamicislamic-tblaIntl API предоставляет эти варианты, но не унифицирует их результат.
Объект Intl.Locale позволяет явно задавать календарную
систему как часть локали.
const locale = new Intl.Locale('ar-SA-u-ca-islamic-umalqura');
locale.calendar;
Календарь фиксируется как часть конфигурации локали и может использоваться в форматерах без повторного указания опций.
const date = new Date('2026-05-27');
const g = new Intl.DateTimeFormat('en-GB', {
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(date);
const h = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura', {
year: 'numeric',
month: 'long',
day: 'numeric'
}).format(date);
Разница заключается в системе отсчёта:
При смене календаря изменяется не только дата, но и отображаемые числовые значения года и месяца.
new Intl.DateTimeFormat('ar-u-ca-islamic', {
year: 'numeric'
}).format(new Date());
Год может отличаться на десятки единиц от григорианского, поскольку отсчёт ведётся от 622 года н.э. (Хиджра).
Islamic calendar formatting применяется в системах, где требуется отображение дат религиозного или культурного значения:
Intl API обеспечивает локализационное представление без необходимости ручного преобразования дат.
Несмотря на широкую поддержку, существуют ограничения:
Работа остаётся односторонней: от timestamp к представлению.
const formatter = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura', {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
});
const parts = formatter.formatToParts(new Date());
Метод formatToParts позволяет разложить исламскую дату
на компоненты:
Это используется при построении кастомных интерфейсов календаря.
Календарная система не влияет на таймзону, однако отображаемое значение даты может изменяться в зависимости от локального времени:
new Intl.DateTimeFormat('en-u-ca-islamic-umalqura', {
timeZone: 'Asia/Riyadh'
});
Таким образом, итоговая дата формируется как комбинация:
Исламский календарь в Intl API часто используется совместно с:
Temporal (в современных реализациях)DateIntl.RelativeTimeFormatIntl.NumberFormatОднако календарная система в Intl остаётся исключительно
форматирующим слоем и не влияет на арифметику дат в стандартном
Date.