В календарных системах с переходом на летнее и зимнее время возникают участки времени, которые физически отсутствуют в локальном часовом поясе. При переходе на летнее время часы переводятся вперёд, и образуется «разрыв» — диапазон локального времени, который никогда не наступает. Например, при сдвиге с 02:00 на 03:00 значение 02:30 становится несуществующим в этот день.
Подобные ситуации критичны для библиотек работы с датами, поскольку входные данные могут формально выглядеть корректными, но не иметь реального представления во времени.
В Luxon базовая сущность работы со временем — объект
DateTime. При создании даты через локальные компоненты
библиотека обязана сопоставить их с конкретным моментом времени в
выбранной временной зоне.
При попадании в несуществующий диапазон (DST gap) возможны разные стратегии интерпретации:
Luxon стремится сохранять предсказуемость и явно сигнализировать о невозможных датах через механизм валидности объекта.
При использовании DateTime.fromObject или локального
создания даты через компоненты, библиотека пытается интерпретировать
вход в контексте временной зоны:
import { DateTime } from "luxon";
const dt = DateTime.fromObject(
{
year: 2026,
month: 3,
day: 29,
hour: 2,
minute: 30
},
{
zone: "Europe/Berlin"
}
);
Если в указанной зоне в этот день отсутствует интервал 02:00–02:59, результат зависит от правил разрешения неоднозначности и конфигурации зоны.
Любой объект DateTime в Luxon содержит встроенный
механизм контроля корректности:
isValid — булево значение валидностиinvalidReason — краткая причина ошибкиinvalidExplanation — более развёрнутое описаниеdt.isValid;
dt.invalidReason;
dt.invalidExplanation;
Для несуществующих дат типичным результатом становится пометка объекта как невалидного или корректировка значения до ближайшего допустимого времени.
Основной источник проблемы — переходы между стандартным и летним временем, но также существуют дополнительные сценарии:
Luxon опирается на ICU и IANA, поэтому поведение зависит от актуальности данных о временных зонах.
Luxon различает два класса проблемных дат:
Для второго случая применяется стратегия нормализации:
Это позволяет избежать «тихих ошибок», когда дата молча интерпретируется неверно.
При создании даты ключевую роль играет параметр временной зоны:
DateTime.fromObject(
{ year: 2026, month: 3, day: 29, hour: 2 },
{ zone: "Europe/Berlin" }
);
В зависимости от зоны один и тот же локальный набор полей может:
Таким образом, несуществующие даты не являются свойством самой даты, а следствием интерпретации локального времени в конкретной зоне.
Несущественные моменты могут проявляться не только при создании, но и при операциях:
const base = DateTime.fromISO("2026-03-29T01:30", {
zone: "Europe/Berlin"
});
const shifted = base.plus({ hours: 1 });
Если результат попадает в «пропущенный» диапазон, Luxon корректирует итоговое значение, стремясь вернуть ближайшее допустимое время.
При построении дат из отдельных компонентов Luxon использует нормализацию:
Это позволяет сохранить консистентность между локальным представлением и абсолютным временем.
Для несуществующих дат invalidReason может отражать
различные категории:
invalid input — некорректные входные данныеunsupported zone — неподдерживаемая временная зонаunparsable — невозможность интерпретации строкиХотя прямое значение «nonexistent time» не всегда явно выделяется, комбинация этих признаков указывает на попадание в DST-разрыв.
Логика обработки несуществующих дат в Luxon строится вокруг трёх принципов:
Такой подход снижает риск появления «тихих» временных ошибок в бизнес-логике, особенно в системах планирования и расписаний.
Luxon не реализует собственную календарную систему, а использует:
Date JavaScriptПоэтому несуществующие даты — это результат взаимодействия локальной интерпретации и правил временных зон, а не внутренней логики библиотеки.
При преобразовании в строку или ISO-формат:
dt.toISO();
Невалидные даты обычно возвращают null, что позволяет
избежать распространения ошибочных значений дальше по цепочке
обработки.
Несущественные даты в Luxon представляют собой точку пересечения календарной арифметики и реальных правил временных зон, где локальное представление времени перестаёт иметь однозначное соответствие с абсолютным моментом.