Конструктор Pikaday принимает объект конфигурации, через
который определяется поведение календаря, его привязка к DOM-элементам,
формат отображения дат и логика взаимодействия с пользователем.
Практически все возможности библиотеки задаются именно через этот
объект, что делает настройку предсказуемой и централизованной.
Ключевым параметром выступает field, определяющий
input-элемент, с которым связывается календарь. Это точка входа, через
которую пользователь взаимодействует с датами.
new Pikaday({
field: document.querySelector('#date')
});
Без указания field календарь не сможет синхронизировать
выбранную дату с формой ввода.
Параметр trigger используется, когда открытие календаря
должно происходить не при фокусе на поле ввода, а при клике по
отдельному элементу.
new Pikaday({
field: document.querySelector('#date'),
trigger: document.querySelector('#calendar-btn')
});
Флаг bound управляет поведением отображения календаря
относительно поля. При значении true (по умолчанию)
календарь позиционируется относительно field. При
false он может быть вставлен в контейнер отдельно.
Параметр position задаёт предпочтительное расположение
календаря относительно input-элемента. Допустимые значения:
top, bottom, left,
right.
new Pikaday({
field: document.querySelector('#date'),
position: 'top'
});
Параметр reposition определяет, будет ли календарь
автоматически менять позицию, если не помещается в пределах окна
браузера. При значении true (по умолчанию) библиотека
пытается избежать выхода за границы viewport.
container позволяет задать DOM-элемент, в который будет
рендериться календарь. Это важно при интеграции в сложные интерфейсы или
модальные окна.
new Pikaday({
field: document.querySelector('#date'),
container: document.querySelector('#calendar-wrapper')
});
format определяет строковый формат даты, который будет
отображаться в input. По умолчанию используется формат
YYYY-MM-DD.
new Pikaday({
field: document.querySelector('#date'),
format: 'DD.MM.YYYY'
});
Для более гибкого управления преобразованием даты используются
функции toString и parse.
toString отвечает за преобразование объекта
Date в строку:
new Pikaday({
field: document.querySelector('#date'),
toString(date) {
const day = date.getDate();
const month = date.getMonth() + 1;
const year = date.getFullYear();
return `${day}.${month}.${year}`;
}
});
parse выполняет обратное преобразование строки в объект
Date:
new Pikaday({
field: document.querySelector('#date'),
parse(dateString) {
const [day, month, year] = dateString.split('.');
return new Date(year, month - 1, day);
}
});
Использование этих функций полностью заменяет стандартный
format и даёт полный контроль над сериализацией дат.
Параметр defaultDate задаёт дату, которая будет выбрана
при инициализации календаря, если поле ввода пустое.
new Pikaday({
field: document.querySelector('#date'),
defaultDate: new Date(2026, 0, 1)
});
Флаг setDefaultDate определяет, будет ли значение
defaultDate автоматически записано в input при создании
экземпляра. При true поле сразу получает значение, при
false календарь лишь использует его внутренне.
new Pikaday({
field: document.querySelector('#date'),
defaultDate: new Date(),
setDefaultDate: true
});
minDate и maxDate задают допустимый
диапазон выбора.
new Pikaday({
field: document.querySelector('#date'),
minDate: new Date(2025, 0, 1),
maxDate: new Date(2026, 11, 31)
});
Эти параметры влияют на интерактивность календаря: даты вне диапазона становятся недоступными для выбора.
yearRange управляет диапазоном лет, отображаемых в
селекторе годов. Он может задаваться числом или массивом.
new Pikaday({
field: document.querySelector('#date'),
yearRange: [1990, 2030]
});
Также допустен сокращённый вариант:
yearRange: 10
В этом случае библиотека рассчитывает диапазон относительно текущего года.
firstDay задаёт первый день недели. Значение
0 соответствует воскресенью, 1 —
понедельнику.
new Pikaday({
field: document.querySelector('#date'),
firstDay: 1
});
Параметр i18n позволяет полностью локализовать текстовые
элементы календаря: названия месяцев, дней недели и кнопки
навигации.
new Pikaday({
field: document.querySelector('#date'),
i18n: {
previousMonth: 'Предыдущий месяц',
nextMonth: 'Следующий месяц',
months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],
weekdays: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],
weekdaysShort: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']
}
});
Эта настройка критична при интеграции в многоязычные интерфейсы, поскольку полностью заменяет встроенные текстовые ресурсы.
numberOfMonths определяет количество месяцев,
отображаемых одновременно. Значение больше 1 полезно для выбора
диапазонов дат.
new Pikaday({
field: document.querySelector('#date'),
numberOfMonths: 2
});
Параметр showDaysInNextAndPreviousMonths управляет
отображением «чужих» дней (из соседних месяцев) в текущей сетке.
new Pikaday({
field: document.querySelector('#date'),
showDaysInNextAndPreviousMonths: true
});
disableWeekends отключает выбор выходных дней:
new Pikaday({
field: document.querySelector('#date'),
disableWeekends: true
});
Более гибкий контроль обеспечивает disableDayFn,
принимающий функцию, которая возвращает true для
недоступных дат.
new Pikaday({
field: document.querySelector('#date'),
disableDayFn(date) {
return date.getDay() === 0; // отключение воскресений
}
});
Также часто используется disableDateFn, аналогичный по
смыслу, но применяемый в более ранних версиях некоторых сборок.
onSelect вызывается при выборе даты:
new Pikaday({
field: document.querySelector('#date'),
onSelect(date) {
console.log('Выбрана дата:', date);
}
});
onOpen срабатывает при открытии календаря,
onClose — при закрытии.
new Pikaday({
field: document.querySelector('#date'),
onOpen() {
console.log('Календарь открыт');
},
onClose() {
console.log('Календарь закрыт');
}
});
onDraw вызывается при каждом рендере календаря, включая
переключение месяцев и обновление состояния интерфейса.
new Pikaday({
field: document.querySelector('#date'),
onDraw() {
console.log('Календарь перерисован');
}
});
keyboardInput управляет возможностью ввода даты с
клавиатуры. При false поле становится фактически только для
выбора через календарь.
new Pikaday({
field: document.querySelector('#date'),
keyboardInput: false
});
Это часто используется для предотвращения некорректного ручного ввода.
theme добавляет CSS-класс к контейнеру календаря,
позволяя применять собственные стили.
new Pikaday({
field: document.querySelector('#date'),
theme: 'dark-theme'
});
С помощью этого параметра достигается изоляция визуальных тем без модификации исходного кода библиотеки.
reposition уже упоминался как механизм автоматического
перемещения календаря, но в связке с bound он формирует
общую стратегию отображения.
blurFieldOnSelect (в некоторых сборках) управляет
потерей фокуса input после выбора даты, что влияет на UX в формах.
new Pikaday({
field: document.querySelector('#date'),
blurFieldOnSelect: true
});
mainCalendar задаёт основной календарь при использовании
нескольких месяцев, определяя, какой из них считается активным при
навигации.
Совокупность параметров конструктора формирует полностью управляемую модель поведения календаря, где каждый аспект — от привязки к DOM до правил блокировки дат — задаётся декларативно через единый объект конфигурации.