Метод setMaxDate в библиотеке Pikaday предназначен для установки максимально допустимой даты, которую пользователь может выбрать в календаре. После применения ограничения все даты, расположенные позже указанного значения, становятся недоступными для выбора.
Метод используется в ситуациях, когда необходимо ограничить диапазон дат сверху:
Установка максимальной даты помогает предотвратить ввод некорректных значений и упрощает взаимодействие с интерфейсом.
picker.setMaxDate(date);
| Параметр | Тип | Описание |
|---|---|---|
| date | Date | Максимально допустимая дата |
Метод не возвращает значение.
const picker = new Pikaday({
field: document.getElementById('date')
});
picker.setMaxDate(new Date(2025, 11, 31));
В данном примере пользователь сможет выбирать даты только до 31 декабря 2025 года включительно.
После установки максимальной даты Pikaday выполняет несколько действий:
Например:
picker.setMaxDate(new Date(2025, 5, 15));
Если открыть июнь 2025 года, то после 15 числа все последующие дни окажутся неактивными.
Одна из самых распространённых задач — запрет выбора будущих дат.
picker.setMaxDate(new Date());
Такой подход часто используется для:
Пользователь сможет выбирать только сегодняшний день и более ранние даты.
Максимальная дата может задаваться явно.
const maxDate = new Date(2030, 0, 1);
picker.setMaxDate(maxDate);
После этого даты позже 1 января 2030 года будут недоступны.
Часто ограничение вычисляется заранее и сохраняется в переменную.
const lastAvailableDate = new Date(2026, 8, 30);
picker.setMaxDate(lastAvailableDate);
Подобный подход улучшает читаемость кода и упрощает поддержку приложения.
Метод можно вызывать многократно.
picker.setMaxDate(new Date(2025, 0, 1));
picker.setMaxDate(new Date(2026, 0, 1));
Второй вызов заменяет ранее установленное ограничение.
Иногда необходимо разрешить выбор даты только в пределах ближайшего периода.
Например, на 30 дней вперёд:
const maxDate = new Date();
maxDate.setDate(maxDate.getDate() + 30);
picker.setMaxDate(maxDate);
Теперь пользователь не сможет выбрать дату позднее чем через 30 дней от текущего момента.
Наиболее часто метод применяется совместно с setMinDate для формирования диапазона.
picker.setMinDate(new Date(2025, 0, 1));
picker.setMaxDate(new Date(2025, 11, 31));
В результате доступными останутся только даты 2025 года.
const minDate = new Date();
const maxDate = new Date();
maxDate.setDate(maxDate.getDate() + 14);
picker.setMinDate(minDate);
picker.setMaxDate(maxDate);
Такой сценарий используется в системах бронирования и записи на услуги.
Пользователь сможет выбрать дату только в течение ближайших двух недель.
Распространённая задача — выбор периода «от» и «до».
const startPicker = new Pikaday({
field: document.getElementById('start')
});
const endPicker = new Pikaday({
field: document.getElementById('end')
});
endPicker.setMaxDate(new Date(2025, 11, 31));
После выбора начальной даты можно динамически обновлять ограничения второго календаря.
startPicker.config.onSel ect = function() {
const startDate = this.getDate();
endPicker.setMinDate(startDate);
};
Максимальная дата может зависеть от действий пользователя.
document
.getElementById('yearSelect')
.addEventListener('change', function() {
const year = Number(this.value);
picker.setMaxDate(
new Date(year, 11, 31)
);
});
После выбора года календарь автоматически перестраивается.
Нередко максимальная дата приходит с сервера.
const responseDate = '2027-06-15';
picker.setMaxDate(
new Date(responseDate)
);
После получения данных календарь начинает использовать новое ограничение.
Если дата позже установленного ограничения:
picker.setMaxDate(
new Date(2025, 5, 1)
);
то:
Это позволяет обеспечить дополнительную валидацию ещё на уровне пользовательского интерфейса.
Для снятия максимальной даты используется значение
null.
picker.setMaxDate(null);
После этого все будущие даты снова становятся доступными.
Такой механизм полезен при переключении режимов формы.
Например:
if (isAdmin) {
picker.setMaxDate(null);
}
else {
picker.setMaxDate(new Date());
}
Внутри экземпляра Pikaday установленное ограничение хранится в конфигурации.
console.log(
picker._o.maxDate
);
Результатом будет объект Date либо null.
Следует учитывать, что обращение к внутренним свойствам считается менее предпочтительным способом работы по сравнению с использованием публичного API.
При использовании метода необходимо помнить, что месяцы в JavaScript нумеруются с нуля.
new Date(2025, 0, 1);
Это:
1 января 2025
А не февраль.
Распространённая ошибка:
picker.setMaxDate(
new Date(2025, 12, 31)
);
Такое выражение фактически создаст дату января 2026 года.
Правильный вариант:
picker.setMaxDate(
new Date(2025, 11, 31)
);
const birthdayPicker = new Pikaday({
field: document.getElementById('birthday')
});
birthdayPicker.setMaxDate(
new Date()
);
Поскольку дата рождения не может находиться в будущем, использование текущего дня в качестве верхней границы является логичным и распространённым решением.
const bookingPicker = new Pikaday({
field: document.getElementById('booking')
});
const maxDate = new Date();
maxDate.setMonth(
maxDate.getMonth() + 6
);
bookingPicker.setMaxDate(maxDate);
Пользователь сможет бронировать даты максимум на шесть месяцев вперёд.
const reportPicker = new Pikaday({
field: document.getElementById('reportDate')
});
reportPicker.setMinDate(
new Date(2025, 0, 1)
);
reportPicker.setMaxDate(
new Date(2025, 11, 31)
);
Такой подход позволяет гарантировать, что дата отчёта относится только к нужному календарному году.
Нежелательно полагаться на автоматическое преобразование:
picker.setMaxDate('2025-12-31');
Предпочтительно:
picker.setMaxDate(
new Date('2025-12-31')
);
Ошибка:
new Date(2025, 12, 1);
Правильно:
new Date(2025, 11, 1);
Некорректная конфигурация:
picker.setMinDate(
new Date(2025, 11, 31)
);
picker.setMaxDate(
new Date(2025, 0, 1)
);
Минимальная дата оказывается больше максимальной, что приводит к логическому конфликту диапазона.
Если максимальная дата зависит от действий пользователя, необходимо вызывать метод повторно после каждого изменения условий.
picker.setMaxDate(newMaxDate);
Иначе календарь продолжит использовать старое ограничение.
Метод setMaxDate чаще всего применяется вместе со следующими методами:
| Метод | Назначение |
|---|---|
setMinDate() |
установка минимальной даты |
setDate() |
выбор даты программно |
getDate() |
получение выбранной даты |
gotoDate() |
переход к указанной дате |
gotoToday() |
переход к текущему дню |
draw() |
перерисовка календаря |
Комбинирование этих методов позволяет создавать гибкие системы выбора дат с точным контролем допустимого диапазона.
setMaxDate является одним из ключевых инструментов управления календарём Pikaday. Метод позволяет задавать верхнюю границу доступных дат, динамически изменять ограничения во время работы приложения, организовывать диапазоны выбора и предотвращать ввод некорректных значений ещё на уровне пользовательского интерфейса.