В библиотеке Luxon форматирование дат и времени основано на двух основных подходах: низкоуровневое управление через шаблоны и высокоуровневые пресеты. Пресеты представляют собой заранее определённые конфигурации отображения, построенные поверх возможностей Intl API, и предназначены для стандартизированного вывода дат в типичных сценариях интерфейсов и отчётов.
Ключевая особенность пресетов заключается в том, что они инкапсулируют сложность локализации и выбора формата, предоставляя набор стабильных именованных вариантов, поведение которых зависит от текущей локали.
В Luxon пресеты используются через метод:
DateTime.toLocaleString(formatOpts)
или через прямую передачу констант из объекта
DateTime.
Пример:
import { DateTime } from "luxon";
const dt = DateTime.now();
dt.toLocaleString(DateTime.DATE_FULL);
Здесь DateTime.DATE_FULL — это пресет форматирования
даты без времени.
Каждый пресет в Luxon является объектом конфигурации, который
передаётся в Intl.DateTimeFormat. Внутри библиотеки он
выглядит как набор опций:
yearmonthdayweekdayhourminutesecondtimeZoneNameПресеты позволяют скрыть эти детали, заменяя их именованными константами.
Минимальный формат даты, ориентированный на компактное отображение.
dt.toLocaleString(DateTime.DATE_SHORT);
Типичный результат:
Характерные свойства:
Средний уровень детализации даты.
dt.toLocaleString(DateTime.DATE_MED);
Пример вывода:
Особенности:
Добавляет день недели к среднему формату даты.
dt.toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY);
Пример:
Используется в интерфейсах, где важен контекст дня недели.
Полный формат даты с текстовым представлением месяца и дня недели.
dt.toLocaleString(DateTime.DATE_FULL);
Пример:
Особенности:
Наиболее расширенный вариант отображения даты.
dt.toLocaleString(DateTime.DATE_HUGE);
Пример:
Характеристики:
Простой формат времени без секунд.
dt.toLocaleString(DateTime.TIME_SIMPLE);
Пример:
Особенности:
Добавляет секунды к времени.
dt.toLocaleString(DateTime.TIME_WITH_SECONDS);
Пример:
Применяется в системах, где важна точность отображения времени.
Компактное отображение даты и времени.
dt.toLocaleString(DateTime.DATETIME_SHORT);
Пример:
Особенности:
Средний уровень детализации для даты и времени.
dt.toLocaleString(DateTime.DATETIME_MED);
Пример:
Характеристики:
Полный формат даты и времени.
dt.toLocaleString(DateTime.DATETIME_FULL);
Пример:
Особенности:
Максимально подробный формат даты и времени.
dt.toLocaleString(DateTime.DATETIME_HUGE);
Пример:
Характеристики:
Пресеты Luxon не фиксируют конкретный формат строки. Они зависят от
текущей локали, установленной в объекте DateTime:
DateTime.local().setLocale("ru");
DateTime.local().setLocale("en");
Это означает:
Внутренне каждый пресет транслируется в конфигурацию:
new Intl.DateTimeFormat(locale, options)
Например:
DateTime.DATE_MED
эквивалентен примерно:
{
year: "numeric",
month: "long",
day: "numeric"
}
Такой подход обеспечивает:
Пресеты и .toFormat() решают разные задачи.
dt.toLocaleString(DateTime.DATE_FULL);
dt.toFormat("dd LLL yyyy");
Пресеты применяются в пользовательских интерфейсах, где требуется адаптивность, тогда как шаблоны используются в технических и интеграционных задачах.
Luxon позволяет модифицировать поведение пресета:
dt.toLocaleString({
...DateTime.DATE_MED,
weekday: "long"
});
Такой подход даёт возможность:
Пресеты доступны как статические свойства:
DateTime.DATE_SHORT
DateTime.DATE_MED
DateTime.DATE_FULL
DateTime.DATE_HUGE
DateTime.TIME_SIMPLE
DateTime.TIME_WITH_SECONDS
DateTime.DATETIME_SHORT
DateTime.DATETIME_MED
DateTime.DATETIME_FULL
DateTime.DATETIME_HUGE
Это позволяет применять их без дополнительных импортов и создавать единообразные правила форматирования во всём коде.
Пресеты учитывают временную зону объекта DateTime:
DateTime.now().setZone("Europe/Paris").toLocaleString(DateTime.DATETIME_FULL);
Изменение зоны влияет на:
Пресеты не изменяют зону, они лишь форматируют уже вычисленное значение.
Каждый пресет ориентирован на определённый баланс между читаемостью и объёмом информации.