Строгий режим в Luxon связан не с отдельным глобальным
переключателем, а с философией обработки даты и времени: любые
неоднозначные или некорректные входные данные не приводят к «догадкам»,
а фиксируются как невалидные значения. Это принципиально отличает
библиотеку от стандартного Date в JavaScript, который часто
скрывает ошибки за автоматическими преобразованиями.
В основе работы Luxon лежит объект DateTime, который
всегда имеет состояние валидности. Любой результат парсинга может быть
либо корректным временем, либо специальным невалидным объектом.
Ключевой принцип:
DateTime с валидными полямиDateTime, но с
isValid = falseconst dt = luxon.DateTime.fromISO("2024-13-40");
dt.isValid; // false
dt.invalidReason; // "unparsable"
dt.invalidExplanation; // более подробное описание
Такой подход исключает «тихие ошибки», когда дата превращается в неожиданное значение.
Встроенный объект Date в Jav * aScript:
Invalid Date только в крайних случаяхПример поведения Date:
new Date(2024, 13, 40);
// корректируется в реальную дату, а не вызывает ошибку
Luxon же не выполняет автоматической коррекции входных данных при разборе строк:
Метод fromISO является одним из наиболее строгих
способов создания даты.
Он ожидает корректную ISO-8601 строку:
const a = luxon.DateTime.fromISO("2026-05-23T10:20:30");
a.isValid; // true
Любое отклонение от формата может привести к невалидному объекту:
const b = luxon.DateTime.fromISO("23-05-2026");
b.isValid; // false
Важная особенность:
Наиболее показательный механизм строгого режима проявляется в
fromFormat.
const dt = luxon.DateTime.fromFormat("2024/05/23", "yyyy-MM-dd");
Несмотря на визуальную схожесть, формат не совпадает с шаблоном. Результат:
dt.isValid; // false
Luxon не пытается:
Сравнение идёт символ в символ согласно маске формата:
yyyy → строго 4 цифры годаMM → строго 2 цифры месяцаdd → строго 2 цифры дняЛюбое отклонение ломает валидность результата.
Вместо исключений библиотека использует объект ошибки внутри
DateTime.
Типовые причины невалидности:
unparsable — строка не соответствует форматуinvalid input — входные данные не могут быть
интерпретированыout of range — значения выходят за допустимые пределы
календаряunsupported zone — неверная временная зонаconst dt = luxon.DateTime.fromObject({
year: 2024,
month: 99,
day: 10
});
dt.isValid; // false
dt.invalidReason; // "invalid input"
Строгий режим предполагает явную проверку результата перед использованием.
Основные свойства:
isValid — итоговое состояниеinvalidReason — тип ошибкиinvalidExplanation — текстовое описание проблемыconst dt = luxon.DateTime.fromISO("invalid-date");
if (!dt.isValid) {
console.log(dt.invalidReason);
}
Такой подход делает обработку данных предсказуемой и устраняет скрытые дефекты на раннем этапе.
Любая операция с невалидным DateTime сохраняет
невалидное состояние.
const dt = luxon.DateTime.fromISO("bad input");
const result = dt.plus({ days: 5 });
result.isValid; // false
Это критически важный элемент строгой модели:
Luxon требует явного и корректного указания зоны, если она используется.
const dt = luxon.DateTime.fromISO("2024-05-23T10:00", {
zone: "Europe/Paris"
});
Если зона некорректна:
const dt = luxon.DateTime.fromISO("2024-05-23T10:00", {
zone: "Invalid/Zone"
});
dt.isValid; // false
Строгий режим здесь выражается в отсутствии fallback:
При работе с внешними источниками данных (формы, API, файлы) строгий режим требует предварительной валидации входа.
Типовой поток:
isValidfunction parseDate(input) {
const dt = luxon.DateTime.fromISO(input);
if (!dt.isValid) {
return null;
}
return dt;
}
Такой подход предотвращает накопление ошибок в бизнес-логике.
Если объект валиден, форматирование выполняется предсказуемо:
const dt = luxon.DateTime.fromISO("2024-05-23T10:00:00");
dt.toFormat("yyyy-MM-dd"); // "2024-05-23"
Если объект невалиден:
const dt = luxon.DateTime.fromISO("bad");
dt.toFormat("yyyy-MM-dd"); // "Invalid DateTime"
Это сохраняет строгую модель на всех этапах жизненного цикла объекта.
При использовании Luxon в строгом режиме формируется архитектурный паттерн «fail-fast»:
Характерные практики:
DateTimeОтсутствие проверки isValid приводит к:
Luxon не препятствует таким ошибкам, но делает их явными и детектируемыми на ранней стадии, что и формирует основу строгого режима работы с датой и временем.