Flatpickr предоставляет гибкую модель ограничения доступных дат через
конфигурации disable и enable, однако прямого
параметра «отключить дни недели» в виде отдельной опции не существует.
Реализация подобного поведения строится на уровне пользовательской
логики с использованием функций фильтрации дат и анализа значения
Date.getDay().
В основе логики отключения дней недели лежит стандартный метод Jav * aScript:
date.getDay() возвращает номер дня недели:
0 — воскресенье1 — понедельник2 — вторник3 — среда4 — четверг5 — пятница6 — субботаFlatpickr использует объекты Date в локальном часовом
поясе браузера, поэтому вычисление дня недели происходит без
дополнительной конвертации.
Наиболее распространённый сценарий — отключение субботы и
воскресенья. Реализуется через функцию в массиве
disable.
flatpickr("#calendar", {
disable: [
function(date) {
return (date.getDay() === 0 || date.getDay() === 6);
}
]
});
Функция возвращает true для дат, которые должны быть
недоступны. Любая дата, удовлетворяющая условию, блокируется в
интерфейсе календаря.
Для гибкой настройки используется проверка через массив запрещённых значений.
const disabledDays = [1, 3, 5]; // понедельник, среда, пятница
flatpickr("#calendar", {
disable: [
function(date) {
return disabledDays.includes(date.getDay());
}
]
});
Такой подход позволяет централизованно управлять правилами без изменения логики компонента.
Flatpickr поддерживает альтернативный режим — enable,
при котором задаются только разрешённые даты. Остальные автоматически
блокируются.
const allowedDays = [1, 2, 3, 4, 5]; // только будни
flatpickr("#calendar", {
enable: [
function(date) {
return allowedDays.includes(date.getDay());
}
]
});
В этом случае выходные исключаются косвенно через отрицательную фильтрацию.
Отключение дней недели часто применяется вместе с ограничением
диапазона через minDate и maxDate.
flatpickr("#calendar", {
minDate: "2026-01-01",
maxDate: "2026-12-31",
disable: [
function(date) {
return date.getDay() === 0;
}
]
});
Подобная комбинация формирует ограниченное окно с дополнительной фильтрацией по дням недели.
Flatpickr поддерживает изменение конфигурации во время выполнения
через метод set.
const fp = flatpickr("#calendar", {
disable: []
});
const disableWeekends = () => {
fp.set("disable", [
function(date) {
return date.getDay() === 0 || date.getDay() === 6;
}
]);
};
Изменение правил применяется без пересоздания экземпляра календаря, что важно при интерактивных интерфейсах.
Функция disable может объединять несколько условий
одновременно:
flatpickr("#calendar", {
disable: [
function(date) {
const isWeekend = date.getDay() === 0 || date.getDay() === 6;
const isFirstDay = date.getDate() === 1;
const isHolidayLike = isWeekend || isFirstDay;
return isHolidayLike;
}
]
});
Внутри одной проверки возможно комбинировать бизнес-правила любой сложности, включая:
Flatpickr позволяет смешивать разные типы значений в
disable, включая строки дат и функции.
flatpickr("#calendar", {
disable: [
"2026-01-01",
"2026-12-31",
function(date) {
return date.getDay() === 6;
}
]
});
При этом логика интерпретации следующая:
Поскольку отображение календаря зависит от локали, важно учитывать
смещение начала недели при визуальной интерпретации, однако
getDay() всегда остаётся неизменным.
flatpickr("#calendar", {
locale: "ru",
weekStart: 1,
disable: [
function(date) {
return date.getDay() === 0;
}
]
});
Визуально неделя может начинаться с понедельника, но логика вычисления воскресенья остаётся фиксированной.
При работе с крупными диапазонами дат функция disable
вызывается для каждой отрисовываемой ячейки календаря. Это делает
критически важной оптимизацию условий.
Неэффективный вариант:
disable: [
function(date) {
return JSON.stringify([0, 6]).includes(date.getDay());
}
]
Оптимальный вариант:
const blocked = new Set([0, 6]);
flatpickr("#calendar", {
disable: [
function(date) {
return blocked.has(date.getDay());
}
]
});
Использование Set снижает сложность проверки до
O(1).
В реальных сценариях отключение дней недели часто становится частью комплексной бизнес-логики.
const isWeekend = (d) => d.getDay() === 0 || d.getDay() === 6;
const isEndOfMonth = (d) => {
const next = new Date(d);
next.setDate(d.getDate() + 1);
return next.getDate() === 1;
};
flatpickr("#calendar", {
disable: [
function(date) {
return isWeekend(date) || isEndOfMonth(date);
}
]
});
Такая структура повышает читаемость и упрощает сопровождение правил.
При изменении состояния интерфейса правила отключения могут адаптироваться:
let mode = "default";
flatpickr("#calendar", {
disable: [
function(date) {
if (mode === "strict") {
return true;
}
if (mode === "weekdays-only") {
return date.getDay() === 0 || date.getDay() === 6;
}
return false;
}
]
});
Логика становится реактивной по отношению к внешним параметрам без пересоздания компонента.
Flatpickr пересчитывает доступность дат при каждом переходе между
месяцами. Функция disable повторно применяется ко всем
видимым ячейкам календаря, включая:
Это означает, что фильтрация дней недели является глобальной для всего диапазона отображения, а не локальной для одного месяца.