Отключение конкретных дат в Flatpickr выполняется через параметр
disable, который позволяет задавать как отдельные даты, так
и диапазоны, а также использовать функцию для динамической логики
блокировки. Этот механизм является ключевым для управления доступностью
календаря в формах бронирования, записи, выбора слотов и любых
сценариях, где требуется ограничить пользовательский ввод.
Параметр disable передаётся в конфигурации Flatpickr как
массив. Каждый элемент массива может иметь один из трёх типов:
{ from, to }true для отключения датыПростейшая форма выглядит так:
flatpickr("#calendar", {
disable: [
"2026-06-10",
"2026-06-15",
"2026-06-20"
]
});
В этом случае конкретные даты становятся недоступными для выбора.
Flatpickr автоматически сопоставляет строки с внутренним форматом даты,
учитывая настройки dateFormat, если они заданы.
При необходимости блокировки несмежных дат используется перечисление значений:
const disabledDates = [
"2026-06-01",
"2026-06-03",
"2026-06-07",
"2026-06-12"
];
flatpickr("#calendar", {
disable: disabledDates
});
Такой подход удобен при работе с данными, полученными из API, где список недоступных дат формируется сервером.
Особенность заключается в том, что Flatpickr сравнивает даты на уровне дня, игнорируя время. Это означает, что любые временные компоненты не влияют на отключение.
Flatpickr поддерживает отключение целых промежутков времени через объектную запись:
flatpickr("#calendar", {
disable: [
{
from: "2026-06-10",
to: "2026-06-20"
}
]
});
Такой формат блокирует все даты включительно от начальной до конечной границы диапазона. Это особенно полезно при:
Можно комбинировать несколько диапазонов:
flatpickr("#calendar", {
disable: [
{ from: "2026-06-01", to: "2026-06-05" },
{ from: "2026-06-15", to: "2026-06-18" }
]
});
Наиболее гибкий вариант — функция, принимающая дату и возвращающая
true (отключить) или false (оставить
доступной).
flatpickr("#calendar", {
disable: [
function(date) {
return date.getDay() === 0 || date.getDay() === 6;
}
]
});
В данном примере отключаются выходные дни (суббота и воскресенье).
Функция получает объект Date, что позволяет использовать
любую JavaScript-логику.
const holidays = [
"2026-01-01",
"2026-05-09",
"2026-12-31"
];
flatpickr("#calendar", {
disable: [
function(date) {
const formatted = date.toISOString().slice(0, 10);
return holidays.includes(formatted);
}
]
});
Функциональный подход позволяет интегрировать внешние источники данных, включая API календарей праздников или корпоративные графики.
Flatpickr допускает смешивание строк, диапазонов и функций в одном массиве:
flatpickr("#calendar", {
disable: [
"2026-06-10",
{ from: "2026-06-15", to: "2026-06-18" },
function(date) {
return date.getDay() === 0;
}
]
});
При обработке календаря все правила применяются последовательно. Если
хотя бы одно условие возвращает true, дата становится
недоступной.
Параметры disable и enable могут
использоваться совместно, но их логика различается:
disable — блокирует указанные датыenable — разрешает только указанные датыЕсли оба параметра заданы одновременно, приоритет обычно отдаётся
логике enable, поскольку она задаёт whitelist-модель.
Пример whitelist-подхода:
flatpickr("#calendar", {
enable: [
"2026-06-01",
"2026-06-02",
"2026-06-03"
],
disable: [
"2026-06-02"
]
});
В результате доступной останется только одна дата — пересечение правил.
Flatpickr воспринимает строки дат в соответствии с
dateFormat. Однако в большинстве случаев рекомендуется
использовать ISO-формат YYYY-MM-DD, чтобы избежать
неоднозначности.
flatpickr("#calendar", {
dateFormat: "Y-m-d",
disable: ["2026-06-10"]
});
При нестандартных форматах важно учитывать, что строковое сравнение может не сработать ожидаемым образом, если формат не совпадает с внутренним представлением.
Хотя Flatpickr работает с датами без явной привязки ко времени, при использовании функций необходимо учитывать локальную временную зону браузера. Например:
flatpickr("#calendar", {
disable: [
function(date) {
const today = new Date();
return date < today.setHours(0, 0, 0, 0);
}
]
});
Такой подход блокирует все прошедшие даты, сравнивая только календарные дни.
Список disable можно изменять после инициализации через
метод set():
const fp = flatpickr("#calendar", {
disable: ["2026-06-10"]
});
fp.set("disable", [
"2026-06-10",
"2026-06-11",
"2026-06-12"
]);
Это позволяет обновлять календарь без пересоздания экземпляра, что критично в SPA-приложениях.
Иногда требуется блокировать повторяющиеся закономерности, например каждый понедельник:
flatpickr("#calendar", {
disable: [
function(date) {
return date.getDay() === 1;
}
]
});
Или каждые выходные:
flatpickr("#calendar", {
disable: [
function(date) {
return date.getDay() === 0 || date.getDay() === 6;
}
]
});
При работе с большим массивом отключённых дат (тысячи значений)
линейный поиск через includes может стать узким местом. В
таких случаях используется Set:
const disabledSet = new Set([
"2026-06-01",
"2026-06-02",
"2026-06-03"
]);
flatpickr("#calendar", {
disable: [
function(date) {
const d = date.toISOString().slice(0, 10);
return disabledSet.has(d);
}
]
});
Это снижает сложность проверки до O(1) и улучшает производительность при рендеринге календаря.
Flatpickr пересчитывает состояние каждой даты при рендере месяца. Это
означает, что сложные вычисления внутри функции disable
будут выполняться многократно. Поэтому:
Отключение конкретных дат в Flatpickr представляет собой гибкий механизм, позволяющий строить как простые ограничения на уровне отдельных дней, так и сложные бизнес-правила с динамической логикой и интеграцией внешних источников данных.