Метод nextMonth в библиотеке Pikaday предназначен для
программного переключения календарного представления на следующий месяц
относительно текущего состояния календаря. Он изменяет внутреннюю дату
просмотра (view date), сохраняя при этом выбранное значение даты (если
оно задано пользователем), и обновляет интерфейс календаря без
необходимости ручного пересчёта месяца и года.
Внутри Pikaday календарь оперирует понятием текущей отображаемой даты, которая не всегда совпадает с выбранной датой. Эта дата используется исключительно для рендеринга сетки календаря.
При вызове nextMonth происходит:
month и
year;Ключевой момент заключается в том, что метод работает именно с view state, а не с selected date, что позволяет пользователю перемещаться по календарю, не изменяя выбор.
Метод вызывается без параметров:
picker.nextMonth();
Возвращаемое значение — экземпляр Pikaday, что позволяет выстраивать цепочки вызовов:
picker.nextMonth().nextMonth();
Такой подход используется в API библиотеки для упрощения последовательных операций над состоянием календаря.
После вызова nextMonth изменяются следующие внутренние
значения:
currentMonth — увеличивается на 1, либо сбрасывается в
0 при переходе через декабрь;currentYear — увеличивается на 1 при переполнении
месяца;draw() или аналогичный внутренний метод рендера
вызывается автоматически;isVisible остаётся неизменным, календарь не
закрывается.Выбранная дата (selectedDate) остаётся нетронутой, если
она была установлена ранее через setDate.
Если в конфигурации Pikaday заданы ограничения:
minDate: new Date(2024, 0, 1),
maxDate: new Date(2025, 11, 31)
метод nextMonth учитывает эти границы при
переключении:
maxDate,
блокируется;Таким образом, nextMonth является безопасной операцией
даже в условиях жёстко заданных диапазонов дат.
После выполнения метода календарь полностью обновляет отображаемую сетку:
Если подключены пользовательские рендер-функции или кастомные шаблоны, они также повторно применяются к новому состоянию.
Метод nextMonth эквивалентен действию пользователя,
который нажимает кнопку перехода вперёд по месяцам в интерфейсе
календаря. Встроенные обработчики Pikaday используют ту же внутреннюю
логику.
При программном вызове:
Многократные вызовы метода приводят к последовательному смещению календаря:
picker.nextMonth(); // +1 месяц
picker.nextMonth(); // ещё +1 месяц
picker.nextMonth(); // ещё +1 месяц
Эквивалентно переходу на три месяца вперёд от текущего отображаемого состояния.
При использовании цепочки:
picker.nextMonth().nextMonth();
результат аналогичен последовательным вызовам, так как каждый вызов возвращает экземпляр календаря.
Внутренне nextMonth опирается на ту же механику, что и
gotoMonth, но с фиксированным инкрементом:
gotoMonth(n) устанавливает конкретный номер
месяца;nextMonth() всегда увеличивает текущий месяц на 1.Фактически, логика nextMonth может быть представлена
как:
picker.gotoMonth(currentMonth + 1);
Однако в реальной реализации добавляется обработка переполнения года и проверка ограничений диапазона дат.
При достижении декабря (month = 11) и вызове
nextMonth происходит:
0;Этот переход не требует дополнительных условий со стороны пользователя и полностью управляется внутренней логикой Pikaday.
Метод часто применяется в сценариях, где требуется автоматическое пролистывание календаря:
При этом состояние input-поля, если календарь привязан к нему, не изменяется до выбора конкретной даты пользователем.
Каждый вызов nextMonth приводит к полной перерисовке
календаря. Это включает:
Производительность операции остаётся стабильной, так как обновляется только текущий видимый месяц без перестроения всего компонента.
Если календарь скрыт (isVisible = false), вызов
nextMonth:
Таким образом, можно предварительно «переместить» календарь вперёд до его отображения.
Если выбранная дата находится вне текущего отображаемого месяца,
вызов nextMonth может привести к следующим визуальным
эффектам:
Это подчёркивает разделение между состоянием выбора и состоянием отображения.
При использовании нестандартных настроек:
firstDay — влияет только на разметку недели, не
затрагивает навигацию;bound — может дополнительно ограничивать переходы;disableDayFn — влияет на доступность дат, но не на
смену месяца.nextMonth остаётся детерминированной операцией изменения
view state независимо от конфигурации рендера.