Григорианский календарь

Григорианский календарь является стандартной системой датирования, используемой по умолчанию в JavaScript при работе с Intl.DateTimeFormat. Он основан на солнечном цикле и используется в большинстве современных локалей, если не указано иное календарное представление через опции международализации.

Базовое поведение календаря в Intl

При создании форматтера даты без дополнительных параметров календарь определяется локалью и средой выполнения, однако практически во всех современных окружениях используется григорианская система.

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 на форматирование

Параметр calendar влияет не на саму временную метку, а на систему представления даты. Григорианский календарь использует привычные значения:

  • год (year)
  • месяц (month)
  • день (day)
  • стандартную нумерацию месяцев от 1 до 12
  • стандартную структуру високосных лет
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)

Метод 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

Григорианский календарь в контексте Intl API обладает рядом характеристик:

  • поддерживает стандарт ISO-8601 как базовую модель времени
  • используется как fallback календарь для большинства локалей
  • не требует дополнительной трансформации дат
  • полностью совместим с Date объектом JavaScript

Сравнение с альтернативными календарями

Intl 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()));

Интероперабельность с Date и Unix timestamp

Григорианский календарь в 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)));

Использование в UI-форматировании

При построении интерфейсов григорианский календарь обеспечивает предсказуемость отображения:

  • одинаковые правила отображения дат
  • отсутствие зависимости от региональных календарных систем
  • единый формат для мульти-язычных приложений
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 выступает как базовый слой нормализации, обеспечивая единообразие интерпретации дат между:

  • браузерами
  • Node.js окружением
  • различными локалями
  • системными настройками операционной системы

Она служит фундаментом, на котором строится вся остальная логика форматирования дат в ECMAScript Internationalization API.