Календарные системы в Intl.DateTimeFormat позволяют
отображать даты не только в григорианском формате, но и в альтернативных
системах летоисчисления, где структура года определяется историческими
или культурными эпохами. Одной из наиболее характерных является японская
календарная система, основанная на эрах правления императоров.
Японский календарь относится к era-based системам, где отсчёт времени ведётся не от фиксированной точки (как в григорианском календаре), а от начала правления императора. Каждый новый императорский период формирует новую эру, и годы считаются заново внутри неё.
Основные эпохи современной системы:
Каждая дата в японской системе содержит не только числовой год, но и имя эры.
В ECMAScript Internationalization API выбор календаря задаётся через
параметр calendar в Intl.DateTimeFormat или
через расширение локали Unicode extension.
Японский календарь обозначается идентификатором:
japaneseПример создания форматтера:
const formatter = new Intl.DateTimeFormat('ja-JP', {
calendar: 'japanese',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(new Date()));
В результате дата будет отображена с указанием японской эры.
u-caАльтернативный способ задания календаря — использование расширения локали:
ja-JP-u-ca-japaneseПример:
const formatter = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(new Date()));
В этом случае календарь фиксируется непосредственно в строке локали,
и параметр calendar в options становится
необязательным.
Особенность японской системы заключается в том, что год отображается относительно начала эры.
Например:
const d1 = new Date('2020-01-01');
const d2 = new Date('1990-01-01');
const fmt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
year: 'numeric'
});
console.log(fmt.format(d1));
console.log(fmt.format(d2));
Результаты будут примерно такими:
Год 1 в каждой эре соответствует её началу.
Поле era управляет тем, как отображается название
эпохи.
Возможные значения:
long — полное название (Reiwa, Heisei)short — сокращённый вариантnarrow — максимально компактное представлениеПример:
const fmt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
era: 'long',
year: 'numeric'
});
console.log(fmt.format(new Date('2021-01-01')));
Различия проявляются особенно заметно в интерфейсах, где важна плотность текста.
При использовании стандартного формата:
new Intl.DateTimeFormat('en-GB', { year: 'numeric' })
год всегда отображается как абсолютное число (например, 2026).
В японской системе:
new Intl.DateTimeFormat('ja-JP-u-ca-japanese', { year: 'numeric' })
год становится относительным значением внутри эры, что изменяет саму модель интерпретации времени.
Переход между эрами — ключевая особенность японского календаря. Когда начинается новая эпоха, счёт годов обнуляется.
Например:
Это влияет на форматирование дат, особенно при работе с историческими данными, где важна точность отображения эпохи.
Японский календарь корректно комбинируется с другими опциями
Intl.DateTimeFormat:
monthdayweekdayhour, minute, secondПример полного форматирования:
const fmt = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
era: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long'
});
console.log(fmt.format(new Date()));
Результат включает день недели, месяц, число и эпоху в едином локализованном формате.
Поддержка японского календаря зависит от реализации движка JavaScript и ICU-библиотеки, используемой в среде выполнения.
Современные браузеры и Node.js обычно поддерживают:
При этом формат может незначительно отличаться в зависимости от версии ICU.
Intl.DateTimeFormat отвечает только за форматирование,
но не за вычисление или хранение дат в альтернативных календарях.
Ключевые ограничения:
Таким образом, японский календарь в Intl — это слой локализации поверх стандартной временной модели.
Японская система календаря применяется в интерфейсах, ориентированных на локализацию под японскую аудиторию, где важна не абсолютная дата, а принадлежность к исторической эпохе.
Форматирование через Intl.DateTimeFormat позволяет
унифицировать отображение без ручного вычисления эр и границ их
начала.