Метод setMinDate используется для динамического
изменения минимально допустимой даты выбора в экземпляре Pikaday. После
вызова метода календарь запрещает выбирать даты, которые находятся
раньше установленного ограничения. Это особенно полезно в сценариях, где
допустимый диапазон дат зависит от действий пользователя, состояния
формы или данных, полученных с сервера.
Метод позволяет изменять ограничения уже после создания календаря, не пересоздавая объект Pikaday и не переинициализируя компонент.
picker.setMinDate(date);
| Параметр | Тип | Описание |
|---|---|---|
date |
Date |
Объект даты, который станет новой минимальной разрешённой датой |
Метод не возвращает значения.
undefined
После установки минимальной даты Pikaday выполняет несколько действий:
Например:
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 года становятся недоступными для выбора.
Pikaday позволяет задать минимальную дату двумя способами:
const picker = new Pikaday({
field: document.getElementById('date'),
minDate: new Date(2026, 0, 1)
});
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.
picker.setMinDate(new Date(2026, 0, 1));
picker.setMaxDate(new Date(2026, 11, 31));
В результате пользователь сможет выбирать даты только внутри указанного диапазона.
Схема работы:
01.01.2026 ---------------- 31.12.2026
доступный диапазон
Все даты за пределами диапазона становятся недоступными.
После установки минимальной даты Pikaday визуально выделяет недоступные дни.
Обычно такие даты:
Это позволяет пользователю сразу видеть допустимые границы.
Пример ограничения бронирования не ранее чем через два дня.
const minBookingDate = new Date();
minBookingDate.setDate(
minBookingDate.getDate() + 2
);
picker.setMinDate(minBookingDate);
Если сегодня 5 июля, бронирование станет доступным начиная с 7 июля.
Допустим, регистрация открывается только после определённой даты.
const registrationStart = new Date(
'2026-09-15'
);
picker.setMinDate(registrationStart);
Пользователь сможет выбирать даты начиная с момента открытия регистрации.
Неверно:
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);
};
Логика работы:
Подобный механизм широко используется в гостиничных сервисах, системах аренды недвижимости и платформах онлайн-бронирования.
Ключевые характеристики setMinDate:
Date или null;setMaxDate;