В стандартной конфигурации Day.js работает с ограниченным набором
сценариев преобразования строк в дату. Базовый парсер опирается на
встроенный механизм Date, который в JavaScript изначально
ведёт себя достаточно гибко и допускает неоднозначные или частично
некорректные строки.
import dayjs from 'dayjs';
dayjs('2026-01-01');
dayjs('2026/01/01');
dayjs('2026-1-1');
Во всех приведённых случаях результат будет интерпретирован как валидная дата, если строка поддаётся разбору встроенным парсером. Такой режим принято рассматривать как нестрогий, поскольку отсутствует жёсткое соответствие заранее заданному формату.
Особенность поведения заключается в том, что несоответствие формату не приводит к ошибке. Вместо этого происходит попытка «догадаться» о значении строки.
Нестрогий режим характеризуется следующими свойствами:
-, /,
пробелы)dayjs('2026-1-1');
dayjs('2026-01-1');
dayjs('2026/1/01');
Все эти строки будут преобразованы в корректные даты, несмотря на различия в структуре.
Такой подход удобен при работе с пользовательским вводом, где данные часто поступают в разнородном виде. Однако он снижает предсказуемость обработки.
Основная проблема заключается в отсутствии гарантии соответствия формату. Например:
dayjs('2026-13-40');
Строка может быть частично нормализована, а результат окажется неожиданным. Встроенный парсер может «перенести» значения в следующий месяц или год, не сигнализируя об ошибке.
Дополнительно:
Строгий режим в Day.js реализуется через плагин
customParseFormat.
import dayjs from 'dayjs';
import customParseFormat from 'dayjs/plugin/customParseFormat';
dayjs.extend(customParseFormat);
После подключения появляется возможность задавать формат и режим строгой проверки.
dayjs('2026-01-01', 'YYYY-MM-DD', true);
Третий параметр true включает строгий режим.
В строгом режиме строка должна полностью соответствовать заданному шаблону:
dayjs('2026-1-1', 'YYYY-MM-DD', true);
Результат: невалидная дата.
dayjs('2026-01-01', 'YYYY-MM-DD', true);
Результат: валидная дата.
При строгом режиме Day.js не выбрасывает исключение. Вместо этого создаётся объект с состоянием «invalid».
const d = dayjs('2026-1-1', 'YYYY-MM-DD', true);
d.isValid(); // false
Метод isValid() становится ключевым инструментом
проверки результата парсинга.
| Характеристика | Нестрогий режим | Строгий режим |
|---|---|---|
| Проверка формата | отсутствует | обязательная |
| Гибкость ввода | высокая | низкая |
| Надёжность данных | средняя | высокая |
| Обработка ошибок | скрытая | явная (invalid) |
| Использование шаблонов | не требуется | обязательно |
При строгом разборе формат становится частью логики валидации, а не только интерпретации.
dayjs('01-02-2026', 'DD-MM-YYYY', true);
Здесь важен порядок:
DD — деньMM — месяцYYYY — годЛюбое отклонение от структуры делает результат невалидным.
Строгий режим применяется в ситуациях, где требуется предсказуемость данных:
В таких сценариях недопустима неоднозначная интерпретация дат.
При необходимости допуска нескольких форматов строгий режим может комбинироваться с массивом шаблонов.
dayjs('2026-01-01', ['YYYY-MM-DD', 'YYYY/MM/DD'], true);
Строка должна соответствовать одному из форматов полностью. Частичное совпадение не допускается.
После любого строгого или нестрогого парсинга результат требует проверки состояния.
const date = dayjs('2026-01-01', 'YYYY-MM-DD', true);
if (date.isValid()) {
// использование даты
}
Метод isValid() опирается на внутреннее состояние
объекта и отражает успешность разбора.
Некорректные даты в строгом режиме не приводят к аварийному завершению выполнения. Вместо этого:
const d = dayjs('invalid', 'YYYY-MM-DD', true);
d.format(); // "Invalid Date"
d.isValid(); // false
Использование строгого режима влияет на общую предсказуемость системы обработки времени. Он уменьшает количество скрытых ошибок, возникающих из-за автоматической интерпретации строк, и переносит контроль формата на уровень входных данных.
В нестрогом режиме логика интерпретации распределяется между разработчиком и библиотекой. В строгом режиме ответственность полностью фиксируется через шаблон парсинга.