В библиотеке Luxon любые операции с датами и временем строго
валидируются. Если входные данные некорректны или операция невозможна,
результатом становится объект DateTime, находящийся в
состоянии инвалидности (invalid). Вместо того чтобы возвращать
null, undefined или выбрасывать исключение,
Luxon формирует объект с признаком isValid === false.
Центральным механизмом диагностики причин такой ошибки выступает
свойство invalidExplanation.
Каждый экземпляр DateTime в Luxon содержит внутреннее
состояние валидности. При успешном создании или преобразовании:
isValid === trueinvalidReason === nullinvalidExplanation === nullПри ошибке:
isValid === falseinvalidReason содержит код причиныinvalidExplanation содержит человекочитаемое описание
проблемыПример базового доступа:
import { DateTime } from "luxon";
const dt = DateTime.fromISO("2024-99-99");
console.log(dt.isValid); // false
console.log(dt.invalidReason); // 'unparsable'
console.log(dt.invalidExplanation); // подробное объяснение
invalidExplanation представляет собой расширенное
текстовое описание причины, по которой объект DateTime
считается невалидным. В отличие от invalidReason, который
используется как машинный код, invalidExplanation
предназначен для интерпретации человеком.
Он отвечает на вопрос не «что сломалось», а «почему это не удалось интерпретировать».
Типичная структура:
При парсинге ISO-строки или пользовательского формата Luxon строго проверяет соответствие стандарту.
const dt = DateTime.fromISO("2023-13-40");
console.log(dt.invalidExplanation);
Типичная интерпретация:
Luxon зависит от IANA time zone database. Любая ошибка в идентификаторе приводит к невалидному объекту.
const dt = DateTime.fromObject(
{ year: 2024, month: 5, day: 10 },
{ zone: "Europe/Mars" }
);
console.log(dt.invalidExplanation);
Типичная причина:
Некоторые методы требуют полного набора параметров. При их отсутствии формируется ошибка.
const dt = DateTime.fromObject({ month: 5, day: 10 });
console.log(dt.invalidExplanation);
Причина:
Luxon не позволяет логически противоречивые комбинации, например:
const dt = DateTime.fromObject({
year: 2024,
month: 3,
day: 31,
hour: 25
});
console.log(dt.invalidExplanation);
| Свойство | Назначение | Формат |
|---|---|---|
| invalidReason | Код ошибки | короткая строка (unparsable,
unsupported zone) |
| invalidExplanation | текстовое объяснение | человекочитаемое описание |
invalidReason используется для программной логики:
if (dt.invalidReason === "unparsable") {
// обработка ошибки парсинга
}
invalidExplanation используется для логирования, отладки
и отображения:
console.log(dt.invalidExplanation);
При разборе ISO-строк Luxon пытается строго интерпретировать стандарт:
const dt = DateTime.fromISO("2024-02-30T10:00:00");
console.log(dt.invalidExplanation);
Причина формируется на основе:
При пользовательских форматах ошибка чаще связана с несоответствием шаблону:
const dt = DateTime.fromFormat("31-02-2024", "dd-MM-yyyy");
console.log(dt.invalidExplanation);
Типичные причины:
Этот метод наиболее чувствителен к логическим ошибкам:
const dt = DateTime.fromObject({
year: 2024,
month: 2,
day: 30
});
console.log(dt.invalidExplanation);
Luxon не просто проверяет диапазоны, но и учитывает календарную корректность.
Luxon не использует статические строки для всех ошибок. Сообщение формируется динамически на основе:
Это делает invalidExplanation более информативным, чем
стандартные ошибки JavaScript.
Если DateTime уже находится в невалидном состоянии, все
последующие операции сохраняют его состояние:
const dt1 = DateTime.fromISO("invalid-date");
const dt2 = dt1.plus({ days: 5 });
console.log(dt2.isValid); // false
console.log(dt2.invalidExplanation);
Причина не меняется — она наследуется от исходного сбоя.
В сложных системах обработки дат invalidExplanation
выполняет роль трассировки ошибки:
Внутри Luxon объект DateTime не выбрасывает исключения,
а сохраняет состояние ошибки в виде:
_isValid_invalidReason_invalidExplanationЭто обеспечивает:
При преобразовании в строку невалидный объект не маскирует ошибку:
const dt = DateTime.fromISO("2024-99-99");
console.log(dt.toISO()); // null
console.log(dt.invalidExplanation);
invalidExplanation остаётся доступным даже после попыток
форматирования.
В системах, где данные о времени поступают из внешних источников, это свойство становится ключевым инструментом:
Его основная роль — сделать ошибку объяснимой без необходимости разбирать внутренние коды Luxon или анализировать исходные строки вручную.