Григорианский календарь является стандартной системой датирования,
используемой по умолчанию в JavaScript при работе с
Intl.DateTimeFormat. Он основан на солнечном цикле и
используется в большинстве современных локалей, если не указано иное
календарное представление через опции международализации.
При создании форматтера даты без дополнительных параметров календарь определяется локалью и средой выполнения, однако практически во всех современных окружениях используется григорианская система.
const formatter = new Intl.DateTimeFormat('ru-RU');
console.log(formatter.format(new Date()));
Даже при отсутствии явного указания календаря, форматирование даты
для локалей вроде ru-RU, en-US,
de-DE и большинства других будет опираться на григорианскую
систему.
Intl API позволяет задавать календарь через параметр
calendar в options. Для григорианского
календаря используется значение "gregory".
const formatter = new Intl.DateTimeFormat('ru-RU', {
calendar: 'gregory'
});
console.log(formatter.format(new Date()));
Параметр calendar влияет не на саму временную метку, а
на систему представления даты. Григорианский календарь использует
привычные значения:
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(new Date('2026-05-27')));
Фактически применяемый календарь можно определить через метод
resolvedOptions().
const formatter = new Intl.DateTimeFormat('ru-RU', {
calendar: 'gregory'
});
console.log(formatter.resolvedOptions().calendar);
Результат:
"gregory"
Это особенно важно при работе с локалями, где календарь может быть переопределён системой.
Во многих реализациях ECMAScript "gregory" используется
по умолчанию, даже если параметр calendar не задан.
const formatter = new Intl.DateTimeFormat('en-US');
console.log(formatter.resolvedOptions().calendar);
Типичный результат:
"gregory"
Метод formatToParts() позволяет получить
структурированное представление даты, что особенно полезно при кастомной
сборке интерфейсов.
const formatter = new Intl.DateTimeFormat('ru-RU', {
calendar: 'gregory',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
console.log(formatter.formatToParts(new Date('2026-05-27')));
Результат будет содержать массив объектов:
[
{ type: 'day', value: '27' },
{ type: 'literal', value: '.' },
{ type: 'month', value: '05' },
{ type: 'literal', value: '.' },
{ type: 'year', value: '2026' }
]
Григорианский календарь в контексте Intl API обладает рядом характеристик:
Date объектом JavaScriptIntl API поддерживает несколько календарных систем, которые могут быть указаны явно:
"gregory" — григорианский календарь"islamic" — исламский лунный календарь"hebrew" — еврейский календарь"japanese" — японская эпохальная система"buddhist" — буддийский календарьПример переключения календаря:
const gregorian = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
year: 'numeric',
month: 'long',
day: 'numeric'
});
const islamic = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
const date = new Date('2026-05-27');
console.log(gregorian.format(date));
console.log(islamic.format(date));
Локаль может влиять на выбор календаря, но параметр
calendar всегда имеет приоритет.
const formatter = new Intl.DateTimeFormat('ar-SA', {
calendar: 'gregory'
});
console.log(formatter.format(new Date()));
Даже если локаль традиционно использует другой календарь, явное
указание "gregory" принудительно переключает систему
отображения.
Intl API приводит календарные идентификаторы к каноническим значениям. Например:
"gregory" — стандартное значение"gregorian" может быть нормализован в
"gregory" (в зависимости от реализации)Проверка всегда должна выполняться через
resolvedOptions().
Григорианский календарь влияет не только на дату, но и на комбинированные форматы с временем.
const formatter = new Intl.DateTimeFormat('ru-RU', {
calendar: 'gregory',
dateStyle: 'full',
timeStyle: 'long'
});
console.log(formatter.format(new Date()));
При работе с диапазонами дат через Intl.DateTimeFormat
календарь влияет на визуальное представление границ диапазона.
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
year: 'numeric',
month: 'short'
});
const start = new Date('2026-01-01');
const end = new Date('2026-12-31');
console.log(formatter.format(start));
console.log(formatter.format(end));
Григорианский календарь не зависит от временной зоны, однако
отображаемое значение даты может изменяться при смене
timeZone.
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
timeZone: 'UTC',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
console.log(formatter.format(new Date()));
Григорианский календарь в Intl API напрямую связан с внутренним представлением времени в JavaScript — количеством миллисекунд с Unix epoch.
const timestamp = 1700000000000;
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(new Date(timestamp)));
При построении интерфейсов григорианский календарь обеспечивает предсказуемость отображения:
const formatter = new Intl.DateTimeFormat('en-GB', {
calendar: 'gregory',
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
document.body.textContent = formatter.format(new Date());
Григорианская система в Intl API выступает как базовый слой нормализации, обеспечивая единообразие интерпретации дат между:
Она служит фундаментом, на котором строится вся остальная логика форматирования дат в ECMAScript Internationalization API.