В библиотеке Luxon объект DateTime представляет момент
времени с учётом часового пояса, локали и внутренних настроек календаря.
Метод toString() используется для получения строкового
представления этого объекта, однако его поведение отличается от
привычных методов форматирования дат в JavaScript.
Метод:
DateTime.toString(): string
возвращает стандартное ISO-подобное представление даты и времени.
Фактически, это обёртка над toISO(), но с дополнительной
семантикой, ориентированной на отладочные и диагностические
сценарии.
Пример:
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, 14, 30);
console.log(dt.toString());
Результат будет примерно таким:
2026-05-23T14:30:00.000+03:00
Ключевые особенности:
Важно учитывать, что toString() не предназначен для
гибкой кастомизации. Любые попытки влиять на форматирование через локаль
или настройки форматтеров не изменяют его поведение.
В Luxon ISO-строка выполняет роль универсального формата обмена
данными. Метод toString() фактически фиксирует объект
DateTime в виде, который:
DateTime.fromISO().Пример обратимости:
const original = DateTime.local();
const serialized = original.toString();
const restored = DateTime.fromISO(serialized);
Такая модель делает toString() удобным в логировании и
передаче данных между сервисами, но не для интерфейсов.
toLocaleString() и локализованное форматированиеМетод toLocaleString() предназначен для отображения даты
и времени в человеко-ориентированном формате с учётом локали и
предустановленных шаблонов Luxon.
Сигнатура:
DateTime.toLocaleString(formatOpts?: DateTimeFormatOptions | Object): string
Этот метод использует либо встроенные пресеты Luxon, либо стандартные
параметры Intl.DateTimeFormat.
Luxon предоставляет набор констант для быстрого форматирования:
DateTime.DATE_SHORTDateTime.DATE_MEDDateTime.DATE_FULLDateTime.DATE_HUGEDateTime.TIME_SIMPLEDateTime.TIME_WITH_SECONDSDateTime.DATETIME_SHORTDateTime.DATETIME_MEDDateTime.DATETIME_FULLDateTime.DATETIME_HUGEПример:
const dt = DateTime.local(2026, 5, 23, 14, 30);
console.log(dt.toLocaleString(DateTime.DATETIME_MED));
Возможный результат:
23 мая 2026 г., 14:30
Формат зависит от локали, установленной в среде или переданной в
объекте DateTime.
Luxon активно использует локаль, заданную через параметр
locale или системные настройки:
const dt = DateTime.local().setLocale("ru");
При этом toLocaleString() автоматически адаптирует:
Пример различий:
const dt = DateTime.local(2026, 5, 23, 14, 30);
console.log(dt.setLocale("en").toLocaleString(DateTime.DATETIME_MED));
console.log(dt.setLocale("ru").toLocaleString(DateTime.DATETIME_MED));
Результат:
May 23, 2026, 2:30 PM
23 мая 2026 г., 14:30
Помимо пресетов, toLocaleString() принимает объект
формата, аналогичный Intl.DateTimeFormatOptions.
Пример:
const dt = DateTime.local(2026, 5, 23, 14, 30);
console.log(
dt.toLocaleString({
weekday: "long",
year: "numeric",
month: "long",
day: "2-digit",
hour: "2-digit",
minute: "2-digit"
})
);
Результат будет зависеть от локали:
суббота, 23 мая 2026 г., 14:30
Этот режим даёт максимальную гибкость, позволяя строить
форматирование уровня стандартного Intl.DateTimeFormat, но
с удобным API Luxon.
toString() и toLocaleString()Оба метода возвращают строку, но их назначение принципиально различается.
toString()
toLocaleString()
Luxon хранит информацию о временной зоне внутри
DateTime. Оба метода учитывают её, но по-разному:
toString() всегда явно показывает смещение:DateTime.local().toString();
пример:
2026-05-23T14:30:00.000+06:00
toLocaleString() обычно скрывает зону, если формат не
требует её отображения:DateTime.local().toLocaleString(DateTime.DATETIME_SHORT);
пример:
23.05.2026, 14:30
При необходимости можно включить отображение зоны через кастомный формат.
Если объект DateTime невалиден, оба метода ведут себя
предсказуемо:
const dt = DateTime.fromObject({ year: 99999 });
console.log(dt.isValid); // false
console.log(dt.toString());
console.log(dt.toLocaleString());
Результат:
Invalid DateTime
Invalid DateTime
Luxon не выбрасывает исключение, а возвращает строку
"Invalid DateTime", что упрощает обработку ошибок в
цепочках данных.
outputCalendarLuxon поддерживает альтернативные календари (например,
islamic, hebrew). Это влияет только на
toLocaleString():
const dt = DateTime.local().reconfigure({ outputCalendar: "islamic" });
console.log(dt.toLocaleString(DateTime.DATE_FULL));
В результате дата будет отображаться в соответствующей календарной
системе, тогда как toString() всегда остаётся в ISO-формате
Григорианского календаря.
Разделение применения методов выстраивается по характеру данных.
toString() применяется при:
toLocaleString() применяется при:
Luxon допускает последовательное преобразование объектов, при котором форматирование может зависеть от последнего этапа:
const dt = DateTime.local()
.setZone("Europe/Paris")
.setLocale("fr");
console.log(dt.toLocaleString(DateTime.DATETIME_MED));
console.log(dt.toString());
Здесь:
toLocaleString() учитывает и локаль, и часовой
пояс;toString() фиксирует момент времени в ISO без адаптации
под региональные особенности.Одним из ключевых аспектов является стабильность:
toString() гарантирует одинаковый результат для
одного и того же момента времени независимо от окружения;
toLocaleString() может давать разные результаты в
зависимости от:
Это различие критично при проектировании систем, где важна предсказуемость сериализации.
В архитектурных решениях Luxon метод toString() часто
выступает как промежуточный слой между внутренним представлением времени
и внешними системами. Он обеспечивает стабильную транспортировку
данных.
toLocaleString() выполняет противоположную функцию —
финальное представление, ориентированное на пользователя и контекст
отображения.
Такое разделение формирует чёткую границу между: