Параметр formatStrict

В Pikaday параметр formatStrict управляет режимом разбора строки даты при преобразовании значения из текстового поля в объект Date. Он влияет исключительно на процесс парсинга входного значения, когда календарь синхронизируется с input-элементом или при программной установке даты через строку с использованием заданного формата.

Ключевая идея параметра заключается в различии между гибким и строгим разбором строковой даты:

  • при formatStrict: false допускаются частичные совпадения формата и «похожие» даты;
  • при formatStrict: true строка обязана строго соответствовать заданному формату без отклонений.

Строгий разбор строки даты

При включении formatStrict библиотека требует полного соответствия строки шаблону, заданному через format.

Например, при конфигурации:

new Pikaday({
    field: document.getElementById('date'),
    format: 'DD.MM.YYYY',
    formatStrict: true
});

строка "01.02.2026" будет корректно распознана, а строки вида:

  • "1.2.2026" (отсутствуют ведущие нули),
  • "01-02-2026" (другой разделитель),
  • "01.02.26" (неполный год)

будут считаться невалидными.

При formatStrict: false некоторые из этих вариантов могут быть интерпретированы корректно в зависимости от используемого парсера (встроенного или внешнего, например Moment.js).


Влияние на синхронизацию input-поля

Параметр особенно важен в сценариях, где календарь связан с текстовым полем.

При вводе пользователем строки:

  • если formatStrict: true, то любое несоответствие формату приводит к тому, что значение не преобразуется в Date, а календарь остаётся без обновления;
  • если formatStrict: false, Pikaday пытается «угадать» дату и привести строку к допустимому объекту.

Это влияет на поведение события onSelect, так как оно не будет вызвано при невалидной строке в строгом режиме.


Совместимость с пользовательским форматом format

formatStrict не имеет смысла без явно заданного format. Формат определяет структуру строки, например:

  • DD.MM.YYYY
  • YYYY-MM-DD
  • MM/DD/YYYY

Строгий режим усиливает контроль именно над этим шаблоном.

Особенно важно учитывать следующие аспекты:

  • порядок компонентов (день, месяц, год);
  • обязательность ведущих нулей;
  • разделители (точка, дефис, слеш);
  • длина года (2 или 4 цифры).

При строгом режиме все эти элементы становятся жёсткими правилами парсинга.


Поведение при некорректных значениях

Если строка не соответствует формату при formatStrict: true, происходит следующее:

  1. Попытка парсинга завершается неудачей.
  2. Внутреннее состояние даты не обновляется.
  3. Поле input сохраняет исходный текст.
  4. Объект Date не создаётся или становится null (в зависимости от конфигурации и версии).

Пример:

const picker = new Pikaday({
    field: document.getElementById('date'),
    format: 'YYYY-MM-DD',
    formatStrict: true
});

picker.setDate('2026-13-40');

Результат: дата не будет установлена, так как месяц и день выходят за допустимые диапазоны.


Взаимодействие с внешними библиотеками парсинга

В зависимости от сборки Pikaday может использовать:

  • встроенный Date.parse,
  • Moment.js,
  • или кастомный парсер.

formatStrict усиливает поведение внешнего парсера:

  • в Moment.js аналогом является строгий режим moment(str, format, true);
  • без строгого режима Moment может допускать частичные совпадения;
  • при строгом режиме любые несоответствия приводят к invalid date.

Разница между строгим и нестрогим режимом

Нестрогий режим (formatStrict: false)

  • допускает вариации формата;
  • пытается нормализовать вход;
  • может интерпретировать неоднозначные даты;
  • повышает «толерантность» к пользовательскому вводу.

Строгий режим (formatStrict: true)

  • требует точного соответствия формату;
  • исключает неоднозначность;
  • снижает вероятность неправильной интерпретации даты;
  • полезен в системах с высокой критичностью данных.

Типичные ошибки при использовании

1. Несовпадение формата и пользовательского ввода

Если интерфейс предполагает ввод DD.MM.YYYY, но пользователь вводит DD/MM/YYYY, строгий режим полностью блокирует парсинг.

2. Отсутствие маски ввода

Без маски ввода пользователь может легко нарушить формат, что приводит к «пустому» состоянию даты.

3. Смешивание локалей

При использовании локализованных форматов (MM/DD/YYYY vs DD.MM.YYYY) строгий режим фиксирует только один вариант, что может вызвать ошибки в международных приложениях.


Рекомендованные сценарии применения

formatStrict особенно полезен в случаях:

  • финансовые формы с датами транзакций;
  • системы бронирования, где дата должна быть однозначной;
  • серверная валидация, завязанная на строгий формат строки;
  • интеграции с API, где ожидается фиксированный формат даты.

Менее уместен параметр в:

  • пользовательских интерфейсах с высокой свободой ввода;
  • полях, где используется автокоррекция;
  • мобильных интерфейсах без маски.

Влияние на UX и предсказуемость данных

Строгий режим увеличивает предсказуемость поведения системы за счёт устранения неоднозначных интерпретаций строк. Однако он одновременно повышает требования к точности ввода.

В прикладных интерфейсах это выражается в:

  • увеличении числа ошибок ввода;
  • необходимости визуальной подсказки формата;
  • важности синхронизации placeholder и реального формата.

Пример конфигурации с полным контролем ввода

new Pikaday({
    field: document.getElementById('date'),
    format: 'DD.MM.YYYY',
    formatStrict: true,
    onSelect: function(date) {
        console.log('Выбрана дата:', date);
    }
});

В такой конфигурации любая дата, поступающая из input, обязана строго соответствовать шаблону, иначе обработка не произойдёт.