В библиотеке Pikaday управление доступным диапазоном выбора дат
реализуется через параметры minDate и maxDate.
Эти настройки определяют нижнюю и верхнюю границы календаря, ограничивая
интерактивный выбор пользователя и фильтруя недопустимые значения ещё на
уровне интерфейса.
minDateПараметр minDate задаёт минимально допустимую дату,
доступную для выбора. Все даты, которые меньше указанного значения,
становятся неактивными в интерфейсе календаря и не могут быть выбраны
пользователем.
Использование minDate особенно важно в сценариях, где
требуется ограничить выбор прошлым или будущим относительно определённой
точки отсчёта.
Базовое поведение:
new Pikaday({
field: document.getElementById('datepicker'),
minDate: new Date(2025, 0, 1)
});
В данном примере пользователь не сможет выбрать дату раньше 1 января 2025 года. Все предыдущие дни будут визуально заблокированы.
minDateПри установке minDate происходит несколько внутренних
ограничений:
minDate.Поведение при некорректном текущем значении:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
minDate: new Date(2025, 5, 10)
});
picker.setDate(new Date(2025, 0, 1)); // будет сброшено
maxDateПараметр maxDate задаёт верхнюю границу выбора даты. Все
значения, превышающие указанную дату, становятся недоступными для
выбора.
Он часто применяется для ограничения будущих дат, например, при выборе даты рождения, бронировании билетов или регистрации событий.
Пример использования:
new Pikaday({
field: document.getElementById('datepicker'),
maxDate: new Date(2025, 11, 31)
});
В этом случае календарь позволяет выбирать даты только до 31 декабря 2025 года включительно.
minDate и maxDateНаиболее распространённый сценарий — ограничение диапазона сразу с двух сторон. Это формирует фиксированное окно допустимых значений.
new Pikaday({
field: document.getElementById('datepicker'),
minDate: new Date(2025, 0, 1),
maxDate: new Date(2025, 11, 31)
});
В результате пользователь получает календарь, в котором доступны только даты 2025 года.
При некорректной конфигурации, когда minDate превышает
maxDate, поведение становится неопределённым с точки зрения
пользовательского опыта. Внутренние проверки библиотеки не гарантируют
автоматическую нормализацию диапазона.
Пример проблемной конфигурации:
new Pikaday({
minDate: new Date(2025, 11, 31),
maxDate: new Date(2025, 0, 1)
});
Такой диапазон фактически делает невозможным выбор любой даты.
minDate и maxDate влияют не только на
выбор, но и на навигацию:
Если текущая дата находится вне диапазона, календарь при инициализации смещается к ближайшей допустимой дате.
minDate и maxDateОграничения могут изменяться после инициализации компонента. Это позволяет адаптировать календарь под пользовательский ввод или внешние условия.
const picker = new Pikaday({
field: document.getElementById('datepicker')
});
picker.setMinDate(new Date(2025, 3, 1));
picker.setMaxDate(new Date(2025, 9, 30));
При изменении границ календарь автоматически пересчитывает доступные значения и корректирует отображаемый месяц.
setDateПри установке даты через setDate происходит проверка на
соответствие диапазону:
minDate или выше maxDate —
значение игнорируется или сбрасывается.Пример:
const picker = new Pikaday({
field: document.getElementById('datepicker'),
minDate: new Date(2025, 0, 1),
maxDate: new Date(2025, 11, 31)
});
picker.setDate(new Date(2024, 5, 1)); // не будет принято
minDate и maxDate принимают значения типа
Date. Передача строк или числовых timestamp без
преобразования может привести к некорректной работе или необходимости
дополнительной обработки.
Корректный подход:
new Date('2025-01-01')
Нежелательный вариант:
minDate: '2025-01-01'
Использование границ календаря часто связано с бизнес-логикой:
Пример вычисления динамического maxDate:
const today = new Date();
const pastYear = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate());
new Pikaday({
field: document.getElementById('datepicker'),
minDate: pastYear,
maxDate: today
});
Если minDate и maxDate не заданы, календарь
работает без ограничений. В этом режиме доступны все даты, включая
далёкое прошлое и будущее, что может быть нежелательно в прикладных
интерфейсах, где требуется контроль вводимых данных.
Ограниченные даты в календаре отображаются как неактивные элементы интерфейса. Они:
Это обеспечивает согласованность между логикой и визуальной моделью календаря без необходимости дополнительной валидации на уровне формы.