Метод setMinDate

Метод setMinDate используется для динамического изменения минимально допустимой даты выбора в экземпляре Pikaday. После вызова метода календарь запрещает выбирать даты, которые находятся раньше установленного ограничения. Это особенно полезно в сценариях, где допустимый диапазон дат зависит от действий пользователя, состояния формы или данных, полученных с сервера.

Метод позволяет изменять ограничения уже после создания календаря, не пересоздавая объект Pikaday и не переинициализируя компонент.

Синтаксис

picker.setMinDate(date);

Параметры

Параметр Тип Описание
date Date Объект даты, который станет новой минимальной разрешённой датой

Возвращаемое значение

Метод не возвращает значения.

undefined

Принцип работы

После установки минимальной даты Pikaday выполняет несколько действий:

  1. Сохраняет новое ограничение внутри объекта календаря.
  2. Перерисовывает интерфейс календаря.
  3. Помечает все даты ранее указанного значения как недоступные.
  4. Блокирует возможность выбора запрещённых дат.
  5. Корректирует навигацию между месяцами при необходимости.

Например:

const picker = new Pikaday({
    field: document.getElementById('date')
});

picker.setMinDate(new Date(2026, 0, 10));

После выполнения кода пользователь сможет выбирать только даты начиная с 10 января 2026 года.


Простое использование

Создание календаря:

const picker = new Pikaday({
    field: document.querySelector('#birthday')
});

Установка минимальной даты:

picker.setMinDate(new Date(2026, 5, 1));

Теперь все даты до 1 июня 2026 года становятся недоступными для выбора.


Отличие от параметра minDate

Pikaday позволяет задать минимальную дату двумя способами:

Через настройки при создании

const picker = new Pikaday({
    field: document.getElementById('date'),
    minDate: new Date(2026, 0, 1)
});

Через метод setMinDate

picker.setMinDate(new Date(2026, 0, 1));

Разница заключается в моменте применения ограничения:

Способ Когда применяется
minDate Во время создания календаря
setMinDate() В любой момент после создания

Метод обеспечивает большую гибкость и подходит для динамических интерфейсов.


Динамическое изменение ограничений

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

Например, доступность бронирования начинается через неделю от текущего дня.

const today = new Date();

const nextWeek = new Date();
nextWeek.setDate(today.getDate() + 7);

picker.setMinDate(nextWeek);

После вызова метода пользователь не сможет выбрать дату раньше чем через семь дней.


Использование текущей даты

Часто требуется запретить выбор прошедших дней.

picker.setMinDate(new Date());

Такой подход активно применяется в системах:

  • бронирования гостиниц;
  • заказа билетов;
  • регистрации мероприятий;
  • доставки товаров;
  • записи на приём.

При открытии календаря прошлые даты будут недоступны.


Связка двух календарей

Очень популярный сценарий — форма выбора периода.

Имеются два календаря:

  • дата начала;
  • дата окончания.

Дата окончания не должна быть раньше даты начала.

const startPicker = new Pikaday({
    field: document.getElementById('start')
});

const endPicker = new Pikaday({
    field: document.getElementById('end')
});

После выбора даты начала:

startPicker.config.onSel ect = function() {
    endPicker.setMinDate(this.getDate());
};

Теперь календарь окончания автоматически ограничивается выбранной датой начала.


Работа с серверными данными

Минимальная дата может определяться на основе данных сервера.

Предположим, сервер вернул дату начала продаж:

fetch('/api/settings')
    .then(response => response.json())
    .then(data => {
        picker.setMinDate(new Date(data.startDate));
    });

После получения ответа календарь автоматически обновляет ограничения.


Изменение ограничения несколько раз

Метод можно вызывать неограниченное количество раз.

picker.setMinDate(new Date(2026, 0, 1));

picker.setMinDate(new Date(2026, 2, 1));

picker.setMinDate(new Date(2026, 5, 1));

Каждый новый вызов полностью заменяет предыдущее ограничение.


Снятие ограничения

Для удаления минимальной даты обычно используется значение null.

picker.setMinDate(null);

После этого ограничение исчезает, и пользователь получает доступ ко всем датам.

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


Проверка текущего выбора

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

Например:

picker.setDate(new Date(2026, 0, 5));

picker.setMinDate(new Date(2026, 0, 10));

В этом случае выбранная дата оказывается вне разрешённого диапазона.

Поведение зависит от версии Pikaday и логики приложения. На практике рекомендуется самостоятельно проверять корректность выбранного значения.

const selected = picker.getDate();

if (selected < minDate) {
    picker.setDate(minDate);
}

Такой подход исключает появление некорректных данных в форме.


Использование вместе с setMaxDate

Метод часто применяется совместно с setMaxDate.

picker.setMinDate(new Date(2026, 0, 1));
picker.setMaxDate(new Date(2026, 11, 31));

В результате пользователь сможет выбирать даты только внутри указанного диапазона.

Схема работы:

01.01.2026 ---------------- 31.12.2026
      доступный диапазон

Все даты за пределами диапазона становятся недоступными.


Влияние на интерфейс календаря

После установки минимальной даты Pikaday визуально выделяет недоступные дни.

Обычно такие даты:

  • отображаются приглушённым цветом;
  • не реагируют на нажатия;
  • получают специальные CSS-классы;
  • исключаются из процесса выбора.

Это позволяет пользователю сразу видеть допустимые границы.


Использование в системах бронирования

Пример ограничения бронирования не ранее чем через два дня.

const minBookingDate = new Date();

minBookingDate.setDate(
    minBookingDate.getDate() + 2
);

picker.setMinDate(minBookingDate);

Если сегодня 5 июля, бронирование станет доступным начиная с 7 июля.


Использование при регистрации на мероприятия

Допустим, регистрация открывается только после определённой даты.

const registrationStart = new Date(
    '2026-09-15'
);

picker.setMinDate(registrationStart);

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


Типичные ошибки

Передача строки вместо объекта Date

Неверно:

picker.setMinDate('2026-01-01');

Корректно:

picker.setMinDate(
    new Date('2026-01-01')
);

Метод ожидает объект Date, а не строковое представление даты.


Использование неверного номера месяца

В JavaScript месяцы начинаются с нуля.

Ошибка:

new Date(2026, 1, 1)

Это не январь, а февраль.

Правильно:

new Date(2026, 0, 1)

Игнорирование часового пояса

При создании дат из строк могут возникать смещения времени.

Например:

new Date('2026-01-01')

В некоторых окружениях результат может зависеть от локальной временной зоны.

Для максимальной предсказуемости часто используют числовой конструктор:

new Date(2026, 0, 1)

Практический пример формы бронирования

const checkIn = new Pikaday({
    field: document.getElementById('checkin')
});

const checkOut = new Pikaday({
    field: document.getElementById('checkout')
});

checkIn.config.onSel ect = function() {

    const selectedDate = this.getDate();

    const nextDay = new Date(selectedDate);

    nextDay.setDate(
        nextDay.getDate() + 1
    );

    checkOut.setMinDate(nextDay);
};

Логика работы:

  1. Пользователь выбирает дату заезда.
  2. Вычисляется следующий день.
  3. Этот день становится минимально допустимой датой выезда.
  4. Выезд раньше заезда становится невозможным.

Подобный механизм широко используется в гостиничных сервисах, системах аренды недвижимости и платформах онлайн-бронирования.

Особенности метода

Ключевые характеристики setMinDate:

  • работает после создания экземпляра Pikaday;
  • принимает объект Date или null;
  • позволяет динамически менять ограничения;
  • автоматически обновляет отображение календаря;
  • блокирует выбор дат ранее установленной границы;
  • хорошо сочетается с setMaxDate;
  • часто применяется в формах выбора диапазонов дат;
  • является основным инструментом для управления минимально допустимой датой во время работы приложения.