Событие onMonthChange в библиотеке Flatpickr вызывается
каждый раз, когда происходит смена отображаемого месяца в календаре. Оно
относится к группе навигационных событий и фиксирует момент, когда
пользователь переключает месяц вперёд или назад, либо когда изменение
месяца происходит программно через API.
Ключевая особенность события заключается в том, что оно не зависит от выбора даты, а реагирует исключительно на изменение контекста отображения календаря. Это делает его важным инструментом для синхронизации интерфейса и динамической подгрузки данных, связанных с конкретным месяцем.
Событие задаётся через опцию onMonthChange при
инициализации Flatpickr:
flatpickr(element, {
onMonthChange: function(selectedDates, dateStr, instance) {
// логика обработки
}
});
Параметры:
Date[]). В контексте onMonthChange может быть
пустым, если пользователь ещё ничего не выбрал.dateFormat.Событие инициируется при изменении внутреннего состояния
currentMonth и currentYear экземпляра
Flatpickr. Это происходит в следующих случаях:
setDate, приводящее к
смене месяца отображения;changeMonth.Важно учитывать, что событие срабатывает только при фактическом изменении месяца. Повторная установка текущего месяца не приводит к повторному вызову.
Через объект instance можно получить актуальные данные о
текущем отображаемом месяце:
onMonthChange: function(selectedDates, dateStr, instance) {
const month = instance.currentMonth;
const year = instance.currentYear;
console.log(`Текущий месяц: ${month}, год: ${year}`);
}
Особенности:
currentMonth возвращает индекс месяца (0–11);currentYear возвращает полный год;1. Динамическая подгрузка данных
При смене месяца часто требуется загрузка данных, привязанных к календарному периоду (события, бронирования, графики).
onMonthChange: function(selectedDates, dateStr, instance) {
fetch(`/api/events?month=${instance.currentMonth + 1}&year=${instance.currentYear}`)
.then(response => response.json())
.then(data => {
console.log(data);
});
}
2. Ограничение доступности дат
Смена месяца может использоваться для пересчёта доступных дат, особенно при работе с серверными ограничениями.
onMonthChange: function(selectedDates, dateStr, instance) {
updateDisabledDates(instance.currentMonth, instance.currentYear);
}
Функция updateDisabledDates может обновлять
disable или enable конфигурацию через
set.
3. Синхронизация с внешним календарём
При наличии кастомного UI или стороннего календаря требуется синхронизация текущего месяца.
onMonthChange: function(selectedDates, dateStr, instance) {
externalCalendar.setMonth(instance.currentMonth);
externalCalendar.setYear(instance.currentYear);
}
Flatpickr предоставляет несколько событий, связанных с изменением состояния, и важно различать их:
onMonthChange — смена месяца отображения;onYearChange — смена года;onValueUpdate — обновление значения инпута;onChange — выбор даты пользователем.onMonthChange не гарантирует изменение выбранной даты, а
лишь изменение визуального контекста календаря.
mode: "range"В режиме диапазона (range) смена месяца может
происходить чаще из-за навигации между начальной и конечной датой
диапазона. При этом:
selectedDates содержит две даты (начало и конец
диапазона);Событие вызывается и при программном управлении календарём:
instance.changeMonth(1);
или:
instance.setDate("2026-06-15");
Если в результате этих операций меняется отображаемый месяц,
onMonthChange будет вызван автоматически.
При активной навигации пользователя событие может вызываться многократно в короткий промежуток времени. Это важно учитывать при выполнении тяжёлых операций.
Рекомендуемые подходы оптимизации:
Flatpickr использует нумерацию месяцев с нуля:
Это необходимо учитывать при взаимодействии с API, которые используют стандартную нумерацию (1–12).
const apiMonth = instance.currentMonth + 1;
Локализация (locale) влияет на отображение названий
месяцев, но не влияет на значение currentMonth. В
обработчике всегда возвращается числовой индекс, независимый от языка
интерфейса.
minDate
и maxDateПри достижении ограничений:
onMonthChange не вызывается, если фактического
изменения месяца не произошло;В системах событийного планирования onMonthChange часто
становится центральным механизмом загрузки данных:
Типичный шаблон:
onMonthChange: function(_, __, instance) {
const { currentMonth, currentYear } = instance;
loadCalendarEvents(currentYear, currentMonth)
.then(events => renderEvents(events));
}
При создании Flatpickr событие onMonthChange не
вызывается автоматически, если пользователь не совершает
навигацию. Исключение составляют случаи, когда:
defaultDate) задаёт месяц, отличный от
текущего отображаемого;Каждое изменение месяца приводит к полному пересчёту сетки календаря:
disable и
enable;onMonthChange вызывается после завершения этих операций,
что гарантирует актуальность отображаемого состояния при доступе через
instance.