Параметр disableWeekends в библиотеке Pikaday управляет
возможностью выбора выходных дней в календаре. Его основная задача —
ограничить взаимодействие пользователя с датами, приходящимися на
субботу и воскресенье, делая их недоступными для выбора в интерфейсе
календаря.
При включении данного параметра календарь визуально сохраняет все дни месяца, однако выходные становятся неактивными. Это выражается в изменении их состояния: такие даты нельзя выбрать ни кликом мыши, ни с клавиатуры, а также они исключаются из логики автозаполнения и программного выбора даты.
Внутри Pikaday выходные определяются через стандартный механизм
Date.getDay(), где:
0 — воскресенье6 — субботаПараметр disableWeekends фактически активирует
проверку:
function isWeekend(date) {
var day = date.getDay();
return day === 0 || day === 6;
}
При установке disableWeekends: true библиотека добавляет
этот фильтр в процесс рендеринга каждого дня календаря. Если дата
попадает под условие выходного дня, она помечается как недоступная.
Наиболее простой сценарий применения параметра заключается в передаче его при инициализации календаря:
var picker = new Pikaday({
field: document.getElementById('date'),
disableWeekends: true
});
В этом случае все субботы и воскресенья автоматически блокируются для выбора.
При включённом disableWeekends изменяется поведение
UI-компонента:
onSelect;В зависимости от CSS-стилей проекта, заблокированные даты могут
отображаться с пониженной контрастностью, серым цветом или
перечёркиванием, однако сама библиотека отвечает только за установку
класса состояния, например is-disabled.
При совместном использовании с minDate и
maxDate фильтрация работает последовательно. Сначала
применяется ограничение диапазона, затем исключаются выходные:
var picker = new Pikaday({
field: document.getElementById('date'),
minDate: new Date(2026, 0, 1),
maxDate: new Date(2026, 11, 31),
disableWeekends: true
});
Если дата попадает в диапазон, но является субботой или воскресеньем, она остаётся недоступной.
Параметр disableWeekends часто используется совместно с
disableDayFn, который позволяет задавать произвольную
логику блокировки дат. При наличии обеих опций логика объединяется:
disableWeekends автоматически блокирует субботу и
воскресенье;disableDayFn добавляет пользовательские условия.Пример комбинирования:
var picker = new Pikaday({
field: document.getElementById('date'),
disableWeekends: true,
disableDayFn: function(date) {
// дополнительно блокируем 13 число каждого месяца
return date.getDate() === 13;
}
});
В результате недоступными становятся как выходные, так и указанные пользовательские даты.
Хотя логика определения выходных дней основана на ISO-стандарте
(суббота и воскресенье), визуальное отображение календаря может меняться
в зависимости от параметров локализации (i18n,
firstDay).
Например, при установке первого дня недели на понедельник:
firstDay: 1
выходные по-прежнему определяются как суббота и воскресенье, но визуально смещаются на край календарной сетки. Это важно учитывать при кастомной стилизации, чтобы не возникало ложного впечатления, что блокируются другие дни.
При использовании метода setDate() или
setDate(new Date()) библиотека не всегда блокирует
установку выходного дня программно. Поведение зависит от конфигурации и
версии:
Для строгой блокировки рекомендуется комбинировать
disableWeekends с дополнительной проверкой перед установкой
даты:
function safeSetDate(picker, date) {
var day = date.getDay();
if (day === 0 || day === 6) {
return;
}
picker.setDate(date);
}
Pikaday добавляет CSS-классы к элементам календаря, что позволяет гибко управлять их отображением:
.is-disabled {
opacity: 0.4;
pointer-events: none;
}
Для выходных дней, заблокированных через
disableWeekends, обычно применяется тот же класс, что и для
других недоступных дат. Это упрощает стилизацию, так как не требуется
различать причины блокировки.
Проверка выходных дней выполняется в процессе генерации каждой ячейки календаря. С точки зрения производительности:
getDay() является дешёвой операцией;disableDayFn).Таким образом, disableWeekends не является значимым
фактором замедления даже в высоконагруженных интерфейсах.
Параметр часто применяется в следующих ситуациях:
Во всех этих сценариях выходные считаются нерабочими периодами, и их исключение упрощает бизнес-логику на уровне интерфейса.
Несмотря на удобство, использование disableWeekends
имеет ряд ограничений:
Поэтому в системах с критичной логикой выбора даты этот параметр рассматривается как UI-уровень фильтрации, а не как полноценный механизм валидации данных.