Pikaday предоставляет широкие возможности для настройки календаря, позволяя комбинировать различные опции для создания гибкого и функционального интерфейса выбора даты. Глубокое понимание взаимодействия между параметрами позволяет создавать как минималистичные, так и сложные решения с расширенной логикой выбора.
minDate и maxDateПараметры minDate и maxDate задают диапазон
доступных для выбора дат. Их совместное использование позволяет
ограничить пользовательский ввод строго определёнными рамками. Например,
при установке:
minDate: new Date(2026, 0, 1),
maxDate: new Date(2026, 11, 31)
календарь отобразит только даты 2026 года, блокируя выбор вне этого периода. При этом следует учитывать, что:
defaultDate выходит за рамки диапазона, она будет
проигнорирована.setDefaultDate: true с недопустимой датой
приведёт к выбору ближайшей доступной даты.numberOfMonths и mainCalendarОпция numberOfMonths позволяет отображать несколько
месяцев одновременно. Она становится особенно полезной при работе с
mainCalendar, который определяет, какой месяц является
основным при рендеринге. Например:
numberOfMonths: 3,
mainCalendar: 'right'
означает, что основной месяц будет справа, а слева и посередине — вспомогательные. Важно помнить:
mainCalendar для позиционирования текущего активного
месяца.showDaysInNextAndPreviousMonths и
enableSelectionDaysInNextAndPreviousMonthsОпция showDaysInNextAndPreviousMonths отображает даты
соседних месяцев в текущем календаре, но сама по себе не делает их
кликабельными. Чтобы пользователи могли выбирать эти даты, необходимо
включить enableSelectionDaysInNextAndPreviousMonths:
showDaysInNextAndPreviousMonths: true,
enableSelectionDaysInNextAndPreviousMonths: true
Комбинация этих двух параметров позволяет:
Без включения enableSelectionDaysInNextAndPreviousMonths
клики по датам соседних месяцев будут игнорироваться, несмотря на их
отображение.
onSelect с format и toStringОбработчик onSelect тесно связан с форматом отображения
даты. Настройка format определяет строковое представление,
а toString позволяет кастомизировать преобразование объекта
Date в текст:
format: 'DD/MM/YYYY',
toString(date, format) {
return moment(date).format(format);
},
onSelect(date) {
console.log('Выбрана дата:', this.toString(date, 'DD/MM/YYYY'));
}
Такая комбинация обеспечивает:
theme и пользовательских CSSОпция theme позволяет быстро изменить визуальный стиль
календаря, применяя CSS-классы. Она легко комбинируется с
пользовательскими стилями:
theme: 'dark-theme',
onDraw() {
this.el.querySelectorAll('.pika-day').forEach(day => {
if (day.innerText === '15') day.classList.add('highlighted');
});
}
Это сочетание даёт возможность:
disableDayFn с minDate и
maxDateФункция disableDayFn позволяет гибко блокировать
отдельные даты. В комбинации с minDate и
maxDate можно реализовать сложные правила:
disableDayFn(date) {
return date.getDay() === 0 || date.getDay() === 6; // блокировка выходных
}
В этом случае:
minDate и maxDate задают общий
диапазон.disableDayFn блокирует отдельные дни внутри этого
диапазона.minDate/maxDate остаются недоступными
независимо от disableDayFn.firstDay вместе с локализациейОпция firstDay управляет началом недели. При работе с
локализацией (i18n) важно синхронизировать эти
параметры:
firstDay: 1, // неделя начинается с понедельника
i18n: {
previousMonth: 'Предыдущий',
nextMonth: 'Следующий',
months: [...],
weekdays: [...],
weekdaysShort: [...]
}
Комбинация позволяет:
theme, numberOfMonths,
mainCalendar) должны настраиваться вместе, чтобы обеспечить
логичное отображение и навигацию.minDate,
maxDate, disableDayFn) комбинируются для
строгого контроля выбора дат.format,
toString, onSelect, onDraw)
должны быть согласованы, чтобы корректно отображать и обрабатывать
пользовательский ввод.Такой подход позволяет создавать сложные и предсказуемые интерфейсы выбора даты, используя все возможности Pikaday без конфликтов между параметрами.