В библиотеке Pikaday параметр numberOfMonths определяет
количество календарных месяцев, отображаемых одновременно в виджете
выбора даты. Это один из ключевых параметров, влияющих на визуальную
плотность, удобство навигации и поведение интерфейса при выборе дат в
диапазонах.
По умолчанию календарь отображает один месяц, однако увеличение
значения numberOfMonths позволяет развернуть интерфейс в
многоколонный календарь, где пользователь видит сразу несколько
последовательных месяцев. Это особенно важно в сценариях выбора
диапазонов дат, планирования событий или анализа временных
промежутков.
Параметр задаётся числом:
var picker = new Pikaday({
field: document.getElementById('datepicker'),
numberOfMonths: 1
});
При значении 1 отображается стандартный одноколоночный
календарь. Это базовый режим, подходящий для большинства форм, где
требуется выбор одной даты.
Увеличение значения:
numberOfMonths: 2
приводит к отображению двух месяцев рядом, чаще всего в виде горизонтального ряда.
При значениях numberOfMonths > 1 календарь формирует
сетку месяцев. Внутренне это не несколько независимых календарей, а
единый компонент с синхронизированной навигацией.
Чаще всего используется горизонтальная компоновка:
numberOfMonths: 3
Результат:
Все три панели синхронизированы по навигации.
Навигационные стрелки (вперёд/назад) при увеличенном
numberOfMonths сдвигают весь набор месяцев одновременно.
Это означает:
numberOfMonths: 3 переход вперёд сдвигает сразу три
месяцаТакое поведение важно для предотвращения рассинхронизации отображаемых периодов.
При работе с диапазонами дат (range selection) многомесячный режим существенно повышает удобство:
Особенно часто используется конфигурация:
numberOfMonths: 2
в системах бронирования, аналитики и планирования.
Увеличение numberOfMonths напрямую влияет на ширину
календаря. Это может приводить к следующим эффектам:
Если контейнер не адаптивный, календарь может выходить за пределы блока:
При значениях 4 и выше:
В некоторых реализациях CSS (или кастомных темах) месяцы могут переноситься на новую строку, образуя сетку:
numberOfMonths: 4numberOfMonths: 6Сам по себе numberOfMonths не содержит встроенной
адаптивности. Однако часто используется динамическое изменение значения
в зависимости от ширины экрана:
var months = window.innerWidth < 600 ? 1 : 2;
var picker = new Pikaday({
field: input,
numberOfMonths: months
});
Такой подход позволяет:
При включении отображения дней соседних месяцев
(showDaysInNextAndPreviousMonths) многомесячный режим
становится более визуально непрерывным:
При изменении первого дня недели (например, понедельник вместо
воскресенья) все отображаемые месяцы синхронно перестраиваются, что
особенно заметно при numberOfMonths > 1, так как
визуальная разница между колонками становится более выраженной.
Хотя календарь не является тяжёлым компонентом, увеличение
numberOfMonths влияет на:
Каждый месяц включает:
Таким образом:
1 месяц ≈ 42 ячейки3 месяца ≈ 126 ячеек6 месяцев ≈ 252 ячейкиВ большинстве интерфейсов это не критично, но при сложных страницах с множеством компонентов может влиять на отзывчивость.
Типовые значения:
1 — формы ввода одиночной даты, минималистичные
интерфейсы2 — диапазоны дат, бронирование, планирование3 — аналитические панели, календарные обзоры4+ — специализированные интерфейсы планирования (редко,
обычно с кастомной версткой)Значения выше 4 используются ограниченно, так как ухудшают баланс между плотностью информации и читаемостью.
При изменении numberOfMonths динамически (после
инициализации) поведение зависит от реализации обёртки:
Это важно учитывать в SPA-средах, где компонент календаря может часто монтироваться и размонтироваться.
Многомесячное отображение меняет модель взаимодействия пользователя:
Однако при слишком большом числе месяцев:
Баланс достигается подбором минимального значения, покрывающего бизнес-задачу без избыточного расширения интерфейса.