js-joda ориентирована на строгую работу с датой и временем без
неоднозначностей, характерных для встроенного Date.
Локализация в этой библиотеке строится не вокруг неявного
форматирования, а через явные правила преобразования временных объектов
в строки с учётом языка, региона и принятых стандартов отображения.
Локализация в js-joda разделяется на два независимых слоя:
Такое разделение позволяет формировать представление даты без привязки к глобальным настройкам окружения, исключая побочные эффекты.
Локаль определяет языковые правила отображения:
В js-joda локаль передаётся явно через объект
Locale.
import { DateTimeFormatter, LocalDate } from '@js-joda/core';
import { Locale } from '@js-joda/locale';
const date = LocalDate.of(2026, 5, 25);
const formatter = DateTimeFormatter
.ofPattern('d MMMM yyyy')
.withLocale(Locale.FRENCH);
const result = date.format(formatter);
В этом примере формат строки остаётся одинаковым, но текстовые элементы адаптируются под язык.
Основной механизм локализации реализуется через js-joda. Этот компонент отвечает за преобразование временных объектов в строковое представление.
Ключевые особенности:
Простейшее форматирование:
const formatter = DateTimeFormatter.ofPattern('yyyy-MM-dd');
date.format(formatter);
Добавление локали:
const formatter = DateTimeFormatter
.ofPattern('EEEE, d MMMM yyyy')
.withLocale(Locale.GERMAN);
Паттерны используют специальные символы:
y — годM — месяцd — день месяцаE — день неделиH — часы (24h)h — часы (12h)m — минутыs — секундыПри использовании локали меняется не структура, а содержимое текстовых элементов:
MMMM → полное название месяцаMMM → сокращённое название месяцаEEEE → полное название дня неделиEEE → сокращённое название дня неделиПример:
const formatter = DateTimeFormatter.ofPattern('EEEE, MMMM d')
.withLocale(Locale.JAPANESE);
date.format(formatter);
Вместо ручного задания шаблонов часто используются стили:
Они задают уровень детализации представления даты.
import { FormatStyle } from '@js-joda/core';
const formatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.FULL)
.withLocale(Locale.ITALIAN);
Стили управляют тем, как будет отображаться дата:
Объекты даты и времени форматируются одинаковым механизмом:
import { LocalDateTime } from '@js-joda/core';
const dt = LocalDateTime.of(2026, 5, 25, 18, 30);
const formatter = DateTimeFormatter
.ofPattern('EEEE, d MMMM yyyy HH:mm')
.withLocale(Locale.RUSSIAN);
dt.format(formatter);
Локаль влияет только на текстовые элементы, тогда как числовые части остаются стабильными.
js-joda предоставляет фабричные методы:
ofLocalizedDateofLocalizedTimeofLocalizedDateTimeЭти методы позволяют отказаться от ручного паттерна:
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)
.withLocale(Locale.CHINESE);
Формат выбирается автоматически на основе локали и стиля.
Паттерн:
Локализованный формат:
Пример различий:
DateTimeFormatter.ofPattern('dd/MM/yyyy');
DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
Первый вариант фиксирован, второй — адаптивен.
Базовая библиотека опирается на ICU-подобную модель локалей. Подключаемые расширения позволяют расширить список поддерживаемых языков и правил форматирования.
Локали могут влиять на:
Пример различий:
Временные значения также подчиняются локализации:
const timeFormatter = DateTimeFormatter
.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.US);
В зависимости от локали:
Комбинация пользовательского паттерна и локали даёт гибридное поведение:
const formatter = DateTimeFormatter
.ofPattern('d MMM yyyy, HH:mm')
.withLocale(Locale.ITALIAN);
Здесь структура фиксирована, но текстовые элементы локализуются.
При использовании E и M происходит
автоматическая подстановка текстовых значений:
const formatter = DateTimeFormatter.ofPattern('EEEE MMMM')
.withLocale(Locale.PORTUGUESE);
Форматтеры в js-joda неизменяемы. Каждое добавление локали создаёт новый экземпляр:
withLocale — новый объектconst base = DateTimeFormatter.ofPattern('d MMM yyyy');
const localized = base.withLocale(Locale.KOREAN);
const another = base.withLocale(Locale.SPANISH);
Хотя локализация и временные зоны независимы, они часто используются вместе:
import { ZonedDateTime, ZoneId } from '@js-joda/core';
const zdt = ZonedDateTime.now(ZoneId.of('Europe/Berlin'));
const formatter = DateTimeFormatter
.ofPattern('EEEE, d MMMM yyyy HH:mm z')
.withLocale(Locale.RUSSIAN);
Здесь локаль отвечает за язык, а зона — за смещение и отображение
z.
Локализация в js-joda строится на принципе явного контроля:
Такой подход позволяет сохранять стабильность форматирования в распределённых системах, где важно единообразие представления даты независимо от окружения выполнения.