Механизм ограничения доступных дат в Flatpickr строится вокруг двух
взаимодополняющих конфигурационных подходов — исключения
(disable) и включения (enable). Приоритетная
логика библиотеки такова, что если задан список разрешённых дат,
календарь начинает работать по принципу «разрешено только то, что явно
указано», игнорируя общий диапазон доступных значений, если он не
пересекается с правилами включения.
Ключевая настройка для работы с ограниченным набором дат — параметр
enable. Он принимает массив, который может содержать:
Минимальная форма использования строится на перечислении допустимых значений:
flatpickr("#calendar", {
enable: [
"2026-06-01",
"2026-06-05",
"2026-06-10"
]
});
В таком режиме календарь становится «разреженным»: все даты, не входящие в список, визуально блокируются и становятся недоступными для выбора.
Flatpickr поддерживает несколько способов задания разрешённых значений, каждый из которых используется в зависимости от структуры данных.
Наиболее простой вариант — ISO-формат:
enable: ["2026-06-01", "2026-06-02"]
Строки интерпретируются в локальной временной зоне браузера. Это важно при работе с серверными данными, так как различие часовых поясов может привести к смещению даты на один день.
Разрешённые даты можно задавать через экземпляры
Date:
enable: [
new Date(2026, 5, 1),
new Date(2026, 5, 10)
]
При таком подходе исключаются проблемы парсинга строк, но сохраняется зависимость от локальной временной зоны.
Flatpickr позволяет задавать интервалы:
enable: [
{
from: "2026-06-01",
to: "2026-06-10"
}
]
Диапазон включается полностью, включая граничные значения. Это используется при моделировании периодов доступности, например расписаний или временных окон бронирования.
Эквивалент с использованием объектов:
enable: [
{
from: new Date(2026, 5, 1),
to: new Date(2026, 5, 10)
}
]
Наиболее гибкий способ управления доступностью — использование функции. В этом режиме каждое значение проверяется динамически.
flatpickr("#calendar", {
enable: [
function(date) {
return date.getDay() !== 0;
}
]
});
В данном случае разрешены все дни, кроме воскресенья. Функция
принимает объект Date и должна возвращать true
или false.
Функциональный подход используется для:
Функции могут включать произвольную логику:
enable: [
function(date) {
const day = date.getDay();
const isWeekend = (day === 0 || day === 6);
const isFirstHalfOfMonth = date.getDate() <= 15;
return !isWeekend && isFirstHalfOfMonth;
}
]
Здесь одновременно учитываются несколько условий, формируя сложное правило доступности.
При одновременном использовании enable и
disable поведение Flatpickr меняется:
enable, календарь начинает работать в режиме
белого списка;disable может дополнительно блокировать отдельные
значения внутри разрешённого множества;Пример комбинированной конфигурации:
flatpickr("#calendar", {
enable: [
{
from: "2026-06-01",
to: "2026-06-30"
}
],
disable: [
"2026-06-10",
"2026-06-15"
]
});
В этом случае диапазон месяца доступен, но отдельные даты исключены.
Частый сценарий — получение списка доступных дат с backend. Такие данные обычно приходят в виде массива строк:
[
"2026-06-01",
"2026-06-02",
"2026-06-05"
]
Передача в Flatpickr происходит напрямую:
fetch("/api/available-dates")
.then(res => res.json())
.then(dates => {
flatpickr("#calendar", {
enable: dates
});
});
При работе с API важно учитывать:
Иногда требуется предварительная очистка:
const normalized = [...new Set(dates)]
.map(d => d.split("T")[0]);
В системах бронирования часто используется генерация интервалов:
const availability = [
{
from: "2026-06-01",
to: "2026-06-07"
},
{
from: "2026-06-15",
to: "2026-06-20"
}
];
flatpickr("#calendar", {
enable: availability
});
Каждый объект интерпретируется как непрерывный блок доступности. Это позволяет описывать сложные расписания без перечисления каждой даты.
При использовании строкового формата:
"2026-06-01"
дата интерпретируется в локальном часовом поясе. При UTC-данных возможны сдвиги:
2026-06-01T00:00:00Z;Решение — нормализация до даты без времени.
Если список разрешённых дат содержит тысячи значений, линейная проверка может снижать производительность. В таких случаях предпочтительнее:
Пример оптимизации:
const allowedSet = new Set(dates);
flatpickr("#calendar", {
enable: [
function(date) {
return allowedSet.has(date.toISOString().split("T")[0]);
}
]
});
Flatpickr позволяет изменять конфигурацию после инициализации через
set():
const fp = flatpickr("#calendar", {
enable: ["2026-06-01"]
});
fp.set("enable", ["2026-06-01", "2026-06-02"]);
При обновлении происходит перерасчёт внутренних структур и перерисовка календаря.
Типичные сценарии применения:
Пример логики доставки:
flatpickr("#delivery", {
enable: [
function(date) {
const today = new Date();
const diff = (date - today) / (1000 * 60 * 60 * 24);
return diff >= 2 && diff <= 10;
}
]
});
Здесь задаётся окно доступности от 2 до 10 дней вперёд.
Параметр enable может сочетаться с:
minDate и maxDate — задают внешние
границы;dateFormat — влияет только на отображение;locale — влияет на визуализацию, но не на логику.Если одновременно заданы minDate/maxDate и
enable, логика становится пересечением условий всех
ограничений.
Поведение Flatpickr при использовании enable можно
описать как последовательность фильтрации:
minDate/maxDate;enable (если задан);disable;Такая модель позволяет строить сложные правила, сохраняя предсказуемость результата.