Режим range в Flatpickr предназначен для выбора
диапазона дат — начальной и конечной точки временного интервала. Такой
режим широко используется в системах бронирования, туристических
сервисах, календарях отпусков, аналитических панелях, финансовых
приложениях и любых интерфейсах, где необходимо указать период
времени.
В отличие от стандартного режима single, где выбирается
только одна дата, режим range позволяет пользователю
выделить сразу две даты, образующие интервал.
Базовая настройка выглядит следующим образом:
flatpickr("#dateRange", {
mode: "range"
});
После активации режима первый клик устанавливает дату начала диапазона, а второй — дату окончания.
После выбора первой даты Flatpickr переходит в состояние ожидания второй даты.
Например:
10.05.2026 → начало диапазона
15.05.2026 → конец диапазона
Результатом становится интервал:
10.05.2026 — 15.05.2026
Все дни между выбранными датами автоматически подсвечиваются в календаре.
Если после завершения диапазона пользователь снова выбирает дату, начинается формирование нового диапазона.
Наиболее простая настройка:
flatpickr("#booking", {
mode: "range",
dateFormat: "d.m.Y"
});
В поле ввода будет отображаться:
12.06.2026 to 18.06.2026
Разделитель по умолчанию зависит от локализации и внутренних настроек Flatpickr.
Для диапазонов особенно важно корректное форматирование дат.
Пример:
flatpickr("#booking", {
mode: "range",
dateFormat: "Y-m-d"
});
Результат:
2026-06-12 to 2026-06-18
Другой вариант:
flatpickr("#booking", {
mode: "range",
dateFormat: "d/m/Y"
});
Результат:
12/06/2026 to 18/06/2026
Разделитель между датами можно изменить при помощи свойства
locale.rangeSeparator.
По умолчанию обычно используется строка:
to
Собственная настройка:
flatpickr("#booking", {
mode: "range",
locale: {
rangeSeparator: " — "
}
});
Теперь результат будет выглядеть так:
12.06.2026 — 18.06.2026
Другие варианты:
rangeSeparator: " - "
rangeSeparator: " → "
rangeSeparator: " / "
В режиме диапазона массив selectedDates содержит два
объекта Date.
Пример:
flatpickr("#booking", {
mode: "range",
onChange(selectedDates) {
console.log(selectedDates);
}
});
После выбора периода:
[
Date(2026-06-12),
Date(2026-06-18)
]
Индексы массива:
selectedDates[0]
Начальная дата.
selectedDates[1]
Конечная дата.
Часто требуется отслеживать момент полного выбора диапазона.
flatpickr("#booking", {
mode: "range",
onChange(selectedDates) {
if (selectedDates.length === 2) {
const start = selectedDates[0];
const end = selectedDates[1];
console.log(start);
console.log(end);
}
}
});
Проверка количества выбранных дат является обязательной, поскольку после первого клика массив содержит только один элемент.
Иногда удобнее обрабатывать диапазон после закрытия календаря.
flatpickr("#booking", {
mode: "range",
onClose(selectedDates) {
if (selectedDates.length === 2) {
console.log("Диапазон выбран");
}
}
});
Подход полезен в интерфейсах бронирования гостиниц и авиабилетов.
Flatpickr позволяет заранее задать диапазон через
defaultDate.
flatpickr("#booking", {
mode: "range",
defaultDate: [
"2026-06-10",
"2026-06-15"
]
});
После открытия календаря интервал уже будет выделен.
Вместо строк можно передавать объекты JavaScript Date.
flatpickr("#booking", {
mode: "range",
defaultDate: [
new Date(2026, 5, 10),
new Date(2026, 5, 15)
]
});
Следует помнить, что нумерация месяцев начинается с нуля.
После создания экземпляра диапазон можно менять динамически.
const picker = flatpickr("#booking", {
mode: "range"
});
picker.setDate([
"2026-07-01",
"2026-07-15"
]);
Календарь автоматически обновит выделение.
Удаление выбранных дат выполняется через метод
clear().
picker.clear();
После вызова:
selectedDates = []
Поле ввода очищается, а выделение исчезает.
Диапазон может начинаться только после определённой даты.
flatpickr("#booking", {
mode: "range",
minDate: "today"
});
Все прошедшие даты становятся недоступными.
Аналогично задаётся верхняя граница.
flatpickr("#booking", {
mode: "range",
maxDate: "2026-12-31"
});
Выбор за пределами указанной даты становится невозможным.
На практике часто используется ограниченный временной коридор.
flatpickr("#booking", {
mode: "range",
minDate: "2026-01-01",
maxDate: "2026-12-31"
});
Диапазон может существовать только внутри указанного года.
Отдельные даты можно исключить из выбора.
flatpickr("#booking", {
mode: "range",
disable: [
"2026-07-04",
"2026-07-05"
]
});
Недоступные даты нельзя включить в диапазон.
Разрешение только определённых дат.
flatpickr("#booking", {
mode: "range",
enable: [
"2026-08-01",
"2026-08-02",
"2026-08-03",
"2026-08-04"
]
});
Все остальные даты будут заблокированы.
Flatpickr поддерживает интервалы, пересекающие месяцы.
Например:
28.05.2026 → 04.06.2026
Календарь корректно подсветит дни сразу в двух месяцах.
Допускается формирование диапазонов через границу года.
Пример:
28.12.2026 → 05.01.2027
Подсветка продолжится независимо от смены года.
Для удобства выбора длинных интервалов часто отображают сразу несколько календарей.
flatpickr("#booking", {
mode: "range",
showMonths: 2
});
Либо:
flatpickr("#booking", {
mode: "range",
showMonths: 3
});
Такой интерфейс особенно распространён в системах бронирования жилья и транспорта.
Календарь можно разместить непосредственно на странице.
flatpickr("#booking", {
mode: "range",
inline: true
});
В этом случае компонент отображается постоянно и не привязан к выпадающему полю.
Для хранения и отображения разных форматов используется альтернативное поле.
flatpickr("#booking", {
mode: "range",
altInput: true,
dateFormat: "Y-m-d",
altFormat: "d.m.Y"
});
Пользователь видит:
12.06.2026 — 18.06.2026
А значение формы остаётся:
2026-06-12 to 2026-06-18
Частая задача — вычисление количества дней между датами.
flatpickr("#booking", {
mode: "range",
onChange(selectedDates) {
if (selectedDates.length === 2) {
const start = selectedDates[0];
const end = selectedDates[1];
const diff =
end.getTime() - start.getTime();
const days =
diff / (1000 * 60 * 60 * 24);
console.log(days);
}
}
});
Для периода:
10.06.2026 → 15.06.2026
Результат:
5
После выбора диапазона Flatpickr автоматически назначает специальные CSS-классы.
Начальная дата:
.startRange
Конечная дата:
.endRange
Промежуточные даты:
.inRange
Это позволяет гибко изменять внешний вид выделения.
Изменение цвета диапазона:
.flatpickr-day.inRange {
background: #3498db;
border-color: #3498db;
}
Изменение начала диапазона:
.flatpickr-day.startRange {
background: #2ecc71;
}
Изменение конца диапазона:
.flatpickr-day.endRange {
background: #e74c3c;
}
flatpickr("#hotel", {
mode: "range",
minDate: "today"
});
flatpickr("#vacation", {
mode: "range",
dateFormat: "d.m.Y"
});
flatpickr("#report", {
mode: "range",
defaultDate: [
"2026-01-01",
"2026-01-31"
]
});
flatpickr("#filter", {
mode: "range",
onChange(selectedDates) {
if (selectedDates.length === 2) {
loadData(
selectedDates[0],
selectedDates[1]
);
}
}
});
Первый клик всегда задаёт начало диапазона.
Второй клик завершает диапазон.
В массиве selectedDates может находиться одна
или две даты.
Flatpickr автоматически подсвечивает все промежуточные дни.
Диапазон может пересекать месяцы и годы.
Поддерживаются все стандартные ограничения
(minDate, maxDate, disable,
enable).
Допускается программное управление через
setDate(), clear() и другие методы экземпляра
Flatpickr.
Для отображения диапазона используются специальные CSS-классы
startRange, endRange и inRange,
позволяющие полностью переопределять визуальное оформление выбранного
периода.