Параметр pickWholeWeek управляет поведением выбора даты
в календаре Pikaday и определяет, будет ли пользователь выбирать одну
конкретную дату или сразу всю календарную неделю при клике по любому
дню.
По умолчанию Pikaday работает в режиме выбора одной даты:
пользователь кликает на день, и в input записывается
конкретная дата.
При включении:
pickWholeWeek: true
поведение меняется — выбор любого дня недели приводит к выбору всей недели целиком, а не отдельной даты.
Это особенно важно в сценариях, где календарь используется не как дата-пикер, а как инструмент работы с недельными периодами (например, отчёты, аналитика, расписания, планирование задач по неделям).
При клике на любую дату внутри недели Pikaday:
onSelect передаётся дата, соответствующая
выбранному дню (или началу недели, в зависимости от реализации);Pikaday изначально не является date-range пикером. Поэтому
pickWholeWeek не превращает его в полноценный range
selector, а лишь меняет семантику выбора.
Чтобы использовать неделю как диапазон, обычно комбинируются:
pickWholeWeek: trueonSelectconst picker = new Pikaday({
field: document.getElementById('datepicker'),
pickWholeWeek: true,
firstDay: 1,
onSelect: function(date) {
console.log('Выбран день недели:', date);
}
});
При включённом pickWholeWeek неделя определяется на
основе выбранной даты и настройки firstDay.
Если:
firstDay: 1 // понедельник
то:
Если:
firstDay: 0 // воскресенье
то неделя смещается соответственно, и диапазон пересчитывается.
Параметр firstDay напрямую влияет на поведение
pickWholeWeek.
firstDay: 1 — стандарт для большинства европейских
интерфейсовfirstDay: 0 — стандарт для СШАПри изменении firstDay визуальное и логическое
определение недели автоматически перестраивается.
При включении pickWholeWeek обычно активируется
дополнительная логика CSS-классов:
Часто используется связка с кастомными стилями:
.is-selected-week {
background-color: #e6f2ff;
}
или через классы, добавляемые Pikaday при рендере календаря.
Поскольку Pikaday не возвращает диапазон напрямую, стандартная
практика — вычисление границ недели внутри onSelect:
onSelect: function(date) {
const start = getStartOfWeek(date);
const end = getEndOfWeek(date);
console.log(start, end);
}
Где getStartOfWeek и getEndOfWeek
реализуются вручную на основе логики firstDay.
Использование pickWholeWeek оправдано в системах, где
данные агрегируются по неделям:
В таких случаях выбор отдельного дня теряет смысл, и недельная агрегация становится основной единицей.
Несмотря на удобство, параметр имеет ряд особенностей:
pickWholeWeek часто используется вместе с:
showWeekNumber — для отображения номера недели;firstDay — для настройки начала недели;onDraw — для кастомной отрисовки недель;onSelect — для обработки выбранного периода.При значении:
pickWholeWeek: false
календарь работает в стандартном режиме:
Это поведение является дефолтным и используется в большинстве сценариев.