Pikaday представляет собой компактный календарный компонент, ориентированный на работу с чистым JavaScript и минимальной зависимостью от внешних библиотек. Репозиторий проекта доступен на GitHub Pikaday, где также фиксируется поведение методов экземпляра, включая навигацию по месяцам и управление текущим отображением календаря.
Метод gotoMonth относится к группе API, отвечающих за
программное управление состоянием отображаемого месяца в календаре. Он
изменяет текущий месяц, который отображается в UI, не затрагивая
выбранную дату напрямую, если только дополнительная логика приложения не
синхронизирует эти состояния.
Метод вызывается на экземпляре календаря:
picker.gotoMonth(monthIndex, [suppressOnChange]);
monthIndex (Number) Индекс месяца в диапазоне от
0 до 11, где:
0 — январь11 — декабрьИндексирование соответствует стандарту JavaScript
Date.
suppressOnChange (Boolean, optional) Флаг подавления
вызова события onChangeMonth (или внутренних обновлений
UI-обработчиков в зависимости от конфигурации). Используется для
программной навигации без побочных эффектов.
При вызове gotoMonth происходит изменение внутреннего
состояния объекта календаря:
currentMonth)currentYear)При этом выбранная дата (selectedDate) не изменяется,
что делает метод строго UI-ориентированным.
Внутренняя модель состояния календаря включает ключевые поля:
currentMonthcurrentYeardraw() — метод перерисовки интерфейсаgotoMonth фактически является обёрткой над изменением
currentMonth с последующим вызовом рендера:
this.currentMonth = monthIndex;
this.draw();
При выходе за границы года выполняется автоматическая нормализация:
11) на январь следующего года0) на декабрь предыдущего годаconst picker = new Pikaday({
field: document.getElementById('input'),
onSelect: function(date) {
console.log(date);
}
});
// Перейти к марту текущего года
picker.gotoMonth(2);
В данном примере календарь переключается на март без изменения выбранной даты.
Хотя метод напрямую принимает только месяц, изменение года происходит косвенно при выходе за диапазон:
picker.gotoMonth(13);
Результат интерпретируется как:
1)Аналогично:
picker.gotoMonth(-1);
Приводит к:
11)Такое поведение обеспечивает непрерывную навигацию по календарю.
При наличии выбранной даты возможны три сценария:
Отображение просто переключается без изменения selection.
Календарь всё равно показывает указанный месяц, но выделение может отсутствовать.
setDateЧасто применяется связка:
picker.setDate(new Date(2026, 2, 15));
picker.gotoMonth(2);
В этом случае UI и состояние синхронизируются.
Параметр suppressOnChange используется для
предотвращения каскада событий:
picker.gotoMonth(5, true);
В этом случае:
Это критично при массовых обновлениях состояния, например:
После изменения месяца вызывается метод draw(),
который:
firstDay (первый день недели)minDate,
maxDate)gotoMonth не выполняет расчётов дат напрямую, а
делегирует их системе рендера.
При наличии ограничений:
minDate: new Date(2026, 0, 1),
maxDate: new Date(2026, 11, 31)
gotoMonth может приводить к частично заблокированному
UI:
Важно, что сам метод не блокирует переход, а только влияет на отображение.
Типичные сценарии применения:
document.getElementById('to-may').addEventListener('click', function () {
picker.gotoMonth(4);
});
monthSelect.oncha nge = function () {
picker.gotoMonth(parseInt(this.value, 10));
};
function showReportMonth(index) {
picker.gotoMonth(index, true);
}
Многократные вызовы gotoMonth подряд:
picker.gotoMonth(1);
picker.gotoMonth(2);
picker.gotoMonth(3);
приводят к последовательной перерисовке, если не используется подавление событий. Это может быть оптимизировано через:
suppressOnChangesetDate — изменяет выбранную датуgotoDate — переключает отображение к конкретной
датеgotoMonth — изменяет только месяц отображенияТаким образом gotoMonth является наиболее «лёгким»
методом навигации, не влияющим на выбор.
При использовании локализации (i18n):
gotoMonth работает независимо от языка интерфейсаМетод имеет предсказуемое поведение, однако:
Архитектурно он предназначен исключительно для управления текущим «окном просмотра» календаря.