Токены форматирования в Luxon представляют собой строковые инструкции, по которым объект даты и времени преобразуется в человекочитаемое представление. Они используются в методе `DateTime
Каждый токен интерпретируется как отдельный элемент даты или времени. Последовательность токенов формирует итоговую строку, где фиксированные символы и динамические части комбинируются в одном выражении.
Числовые токены определяют компоненты даты с разной степенью детализации и формата отображения.
yyyy — полный год (2026)yy — последние две цифры года (26)Пример:
DateTime.local().toFormat("yyyy")
// 2026
DateTime.local().toFormat("yy")
// 26
M — месяц без ведущего нуля (1–12)MM — месяц с ведущим нулём (01–12)DateTime.local().toFormat("M")
// 5
DateTime.local().toFormat("MM")
// 05
d — день месяца без нуля (1–31)dd — день месяца с нулём (01–31)DateTime.local().toFormat("d")
// 7
DateTime.local().toFormat("dd")
// 07
H — 24-часовой формат без нуля (0–23)HH — 24-часовой формат с нулём (00–23)h — 12-часовой формат без нуля (1–12)hh — 12-часовой формат с нулём (01–12)m — минуты (0–59)mm — минуты с нулём (00–59)s — секунды (0–59)ss — секунды с нулём (00–59)DateTime.local().toFormat("HH:mm:ss")
// 14:05:09
S — десятые доли секундыSS — сотые доли секундыSSS — миллисекундыDateTime.local().toFormat("ss.SSS")
// 09.482
Особенность: Luxon округляет значения при форматировании, а не просто отсекает лишние цифры.
a — AM/PM (локализованное значение)DateTime.local().toFormat("hh:mm a")
// 02:15 PM
В разных локалях вывод AM/PM может заменяться на
локальные обозначения.
L — номер месяца (1–12)LL — 2-значный месяц (01–12)LLL — сокращённое название месяца (Jan, Feb)LLLL — полное название месяца (January)DateTime.local().setLocale("en").toFormat("LLLL")
// January
c — номер дня недели (1–7)ccc — сокращённое название дня (Mon)cccc — полное название дня (Monday)DateTime.local().setLocale("en").toFormat("cccc")
// Monday
Luxon поддерживает ISO-нумерацию недель.
kkkk — год недели (week year)W — номер недели в годуDateTime.local().toFormat("kkkk-'W'WW")
// 2026-W21
Z — смещение в формате +02:00ZZ — компактное смещение +0200DateTime.local().toFormat("ZZ")
// +0600
z — короткое имя зоны (если доступно)zz — полное имя зоныDateTime.local().toFormat("z")
// GMT+6
Luxon тесно связан с Intl и поддерживает локали через
.setLocale().
DateTime.local()
.setLocale("ru")
.toFormat("cccc, LLLL")
// понедельник, май
При смене локали меняется не только язык, но и правила отображения чисел и названий.
Любой символ, который не является токеном, может быть выведен как литерал. Для этого используется обрамление в одинарные кавычки.
DateTime.local().toFormat("dd 'дня'")
// 07 дня
Если требуется вывести сам апостроф:
DateTime.local().toFormat("HH:mm ''")
// 14:05 '
Токены могут свободно комбинироваться для создания сложных форматов.
DateTime.local().toFormat("cccc, dd LLLL yyyy HH:mm")
// понедельник, 07 май 2026 14:05
DateTime.local().toFormat("yyyy/MM/dd HH:mm:ss.SSS Z")
// 2026/05/07 14:05:09.482 +0600
Luxon поддерживает стандартные ISO-методы:
toISO()toISODate()toISOTime()Токены toFormat() дают полный контроль над
представлением, тогда как ISO-методы фиксированы стандартом.
DateTime.local().toISO()
// 2026-05-07T14:05:09.482+06:00
DateTime.local().toFormat("yyyy-MM-dd HH:mm")
// 2026-05-07 14:05
"yyyy-LL-dd"
"dd LLLL yyyy"
"yyyy-LL-dd HH:mm:ss"
"EEE, dd LLL yyyy HH:mm:ss Z"
Парсер Luxon обрабатывает строку слева направо, сопоставляя
максимально длинные токены первыми. Например, yyyy всегда
будет распознан как единый токен, а не как четыре отдельных
y.
Символы вне набора токенов интерпретируются как литералы без дополнительного экранирования, если не совпадают с токенами.
Если часть даты отсутствует (например, время в DateTime
без точного значения секунд), Luxon подставляет значения из объекта
времени или использует нули, не выбрасывая ошибку форматирования.