Метод prevMonth() в библиотеке Pikaday предназначен для
перехода календаря на предыдущий месяц относительно текущего
отображаемого периода. Он изменяет состояние календаря, обновляет
интерфейс и отображает даты месяца, который предшествует открытому в
данный момент.
Метод относится к навигационным инструментам Pikaday и используется в ситуациях, когда необходимо программно управлять перемещением между месяцами без участия пользователя или в дополнение к стандартным кнопкам переключения.
Сигнатура метода выглядит следующим образом:
picker.prevMonth();
Метод не принимает аргументов и не возвращает значения.
Каждый экземпляр Pikaday хранит информацию о текущем отображаемом
месяце и годе. При вызове prevMonth() происходит:
Например, если календарь показывает июнь 2025 года:
picker.prevMonth();
После вызова будет отображён май 2025 года.
Если открыт январь:
picker.prevMonth();
то календарь автоматически переключится на декабрь предыдущего года.
Наиболее распространённый вариант применения выглядит следующим образом:
const picker = new Pikaday({
field: document.getElementById('date')
});
picker.prevMonth();
После выполнения команды календарь сместится на один месяц назад.
Важно понимать, что метод работает с отображаемым месяцем, а не с выбранной датой.
Предположим, выбрана дата:
15.03.2025
Однако пользователь уже перешёл в июнь:
Июнь 2025
Вызов:
picker.prevMonth();
переключит календарь на май 2025 года, а не на февраль относительно выбранной даты.
Таким образом, метод ориентируется исключительно на текущее состояние интерфейса.
Стандартные элементы навигации можно заменить собственными кнопками.
HTML:
<input id="date">
<button id="prev">
Предыдущий месяц
</button>
Jav * aScript:
const picker = new Pikaday({
field: document.getElementById('date')
});
document
.getElementById('prev')
.addEventListener('click', () => {
picker.prevMonth();
});
При нажатии кнопки календарь будет перемещаться назад на один месяц.
Метод можно вызывать несколько раз подряд.
picker.prevMonth();
picker.prevMonth();
picker.prevMonth();
Если первоначально отображался август:
Август → Июль → Июнь → Май
В результате календарь покажет май текущего года.
Одной из важных особенностей метода является автоматическая обработка смены года.
Исходное состояние:
Январь 2025
Вызов:
picker.prevMonth();
Результат:
Декабрь 2024
Разработчику не требуется самостоятельно отслеживать уменьшение года.
Иногда требуется быстро перейти на несколько месяцев назад.
Пример перехода на полгода:
for (let i = 0; i < 6; i++) {
picker.prevMonth();
}
Если отображался июль:
Июль → Январь
После завершения цикла календарь окажется на январе того же года.
Поскольку один год содержит двенадцать месяцев, можно использовать цикл.
function goPreviousYear() {
for (let i = 0; i < 12; i++) {
picker.prevMonth();
}
}
Альтернативный вариант:
Array.from({ length: 12 }).forEach(() => {
picker.prevMonth();
});
Оба решения приводят к отображению аналогичного месяца предыдущего года.
Метод тесно связан с другими средствами управления календарём.
Пример переключения между месяцами:
document
.getElementById('prev')
.addEventListener('click', () => {
picker.prevMonth();
});
document
.getElementById('next')
.addEventListener('click', () => {
picker.nextMonth();
});
В таком случае создаётся полностью программируемая система навигации.
Иногда необходимо сначала перейти к конкретному месяцу, а затем выполнить шаг назад.
picker.gotoMonth(6);
picker.prevMonth();
Если нумерация месяцев начинается с нуля, то:
6 = июль
После вызова prevMonth() будет показан июнь.
Метод часто применяется после перехода к определённой дате.
picker.gotoDate(
new Date(2025, 10, 10)
);
picker.prevMonth();
Первоначально откроется ноябрь 2025 года.
Затем будет отображён:
Октябрь 2025
Если для календаря задана минимальная дата:
const picker = new Pikaday({
field: document.getElementById('date'),
minDate: new Date(2025, 0, 1)
});
то поведение зависит от внутренней логики Pikaday.
При попытке уйти за допустимые границы календарь может:
Поэтому при использовании диапазонов рекомендуется тестировать навигацию отдельно.
Хотя prevMonth() выполняет движение назад, настройки
максимальной даты также влияют на общую работу календаря.
const picker = new Pikaday({
field: document.getElementById('date'),
maxDate: new Date(2025, 11, 31)
});
В таких случаях навигация должна рассматриваться совместно с ограничениями выбора дат.
Метод может использоваться в сценариях автоматического просмотра периодов.
Пример показа предыдущих месяцев каждые две секунды:
setInterval(() => {
picker.prevMonth();
}, 2000);
Календарь будет последовательно перемещаться назад.
Иногда требуется реализовать нестандартный интерфейс.
<div class="arrow-left">
←
</div>
document
.querySelector('.arrow-left')
.addEventListener('click', () => {
picker.prevMonth();
});
Такой подход позволяет полностью отказаться от стандартных кнопок Pikaday.
Во многих системах бронирования необходимо просматривать предыдущие периоды.
backButton.addEventListener('click', () => {
picker.prevMonth();
});
Типичные сценарии:
Метод выполняет минимальный набор операций:
Даже многократные вызовы обычно не создают заметной нагрузки:
for (let i = 0; i < 100; i++) {
picker.prevMonth();
}
Однако большое количество последовательных перерисовок может вызывать лишние обновления интерфейса, поэтому при сложных сценариях предпочтительно использовать методы прямого перехода к нужной дате.
Некоторые разработчики предполагают, что метод меняет текущее значение поля.
Неверно:
picker.prevMonth();
console.log(
picker.getDate()
);
prevMonth() не изменяет выбранную дату. Он изменяет
только отображение календаря.
Ошибка:
picker.prevMonth();
если объект ещё не создан.
Правильно:
const picker = new Pikaday({
field: input
});
picker.prevMonth();
Метод не принимает аргументов.
Неверно:
picker.prevMonth(2);
или
picker.prevMonth('March');
Корректный вариант:
picker.prevMonth();
<input id="date">
<button id="back">
Назад
</button>
const picker = new Pikaday({
field: document.getElementById('date')
});
document
.getElementById('back')
.addEventListener('click', () => {
picker.prevMonth();
});
В этом примере кнопка вызывает метод prevMonth(), после
чего календарь перемещается на один месяц назад относительно текущего
отображаемого периода. Такой подход лежит в основе большинства
пользовательских механизмов навигации в Pikaday.