Отключение диапазонов дат

Flatpickr предоставляет гибкую систему управления доступностью дат через параметр disable, который позволяет исключать отдельные даты, диапазоны и даже сложные наборы правил. Механизм отключения диапазонов дат является ключевым инструментом при построении календарей бронирования, корпоративных систем планирования и любых интерфейсов, где требуется строгий контроль допустимых значений выбора.

В основе логики отключения лежит массив disable, принимающий различные типы значений:

  • отдельные даты
  • диапазоны дат
  • функции-валидаторы
  • смешанные конфигурации

Для диапазонов используется объект с ключами from и to, задающий интервал включительно:

{
  from: "2026-01-10",
  to: "2026-01-20"
}

Такой диапазон полностью исключает возможность выбора любой даты внутри указанного промежутка. Внутренний механизм Flatpickr проверяет каждую дату при рендеринге календаря и помечает её как недоступную.

Отключение одного диапазона дат

Простейшая конфигурация отключения диапазона выглядит следующим образом:

flatpickr("#calendar", {
  disable: [
    {
      from: "2026-02-01",
      to: "2026-02-10"
    }
  ]
});

В результате даты от 1 февраля 2026 до 10 февраля 2026 становятся недоступными для выбора. Такой подход применяется, например, при блокировке периода технического обслуживания или занятости ресурса.

Использование Date-объектов

Помимо строкового формата, диапазоны можно задавать через объекты Date, что особенно важно при динамическом вычислении границ:

flatpickr("#calendar", {
  disable: [
    {
      from: new Date(2026, 1, 1),
      to: new Date(2026, 1, 10)
    }
  ]
});

Здесь необходимо учитывать, что месяцы в JavaScript нумеруются с нуля, поэтому 1 соответствует февралю.

Множественные диапазоны отключения

Flatpickr поддерживает комбинирование нескольких диапазонов в одном массиве disable. Это позволяет строить сложные правила блокировки:

flatpickr("#calendar", {
  disable: [
    {
      from: "2026-03-01",
      to: "2026-03-05"
    },
    {
      from: "2026-03-10",
      to: "2026-03-15"
    }
  ]
});

Каждый диапазон обрабатывается независимо, а итоговая недоступность формируется объединением всех пересечений.

Пересекающиеся диапазоны

При пересечении диапазонов система не требует их предварительной нормализации. Например:

disable: [
  { from: "2026-04-01", to: "2026-04-10" },
  { from: "2026-04-05", to: "2026-04-15" }
]

Результирующая недоступная зона фактически покрывает весь интервал с 1 по 15 апреля. Flatpickr выполняет проверку каждой даты независимо, поэтому пересечения не влияют на корректность работы.

Комбинирование диапазонов и отдельных дат

Часто требуется отключать как диапазоны, так и конкретные дни:

flatpickr("#calendar", {
  disable: [
    {
      from: "2026-05-01",
      to: "2026-05-10"
    },
    "2026-05-15",
    "2026-05-20"
  ]
});

В этом случае библиотека объединяет правила разного типа в единую проверочную функцию.

Использование функций для динамических диапазонов

Более гибкий способ управления отключением заключается в использовании функции:

flatpickr("#calendar", {
  disable: [
    function(date) {
      const start = new Date(2026, 6, 1);
      const end = new Date(2026, 6, 10);
      return date >= start && date <= end;
    }
  ]
});

Такой подход позволяет реализовать условия, которые невозможно выразить статическими диапазонами: зависимость от текущего времени, внешних данных или бизнес-логики.

Инверсия логики через enable

Хотя основной механизм работает через disable, в некоторых случаях проще задать разрешённые диапазоны через enable. Однако при работе именно с исключениями диапазонов предпочтение отдается disable, так как он лучше масштабируется при большом количестве правил.

Особенности обработки границ диапазона

Границы from и to включаются в диапазон. Это означает:

  • from считается недоступной датой
  • to также считается недоступной датой
  • все промежуточные даты блокируются автоматически

При необходимости исключить границы из блокировки используется смещение дат на один день:

{
  from: "2026-06-02",
  to: "2026-06-09"
}

где реальные границы вычисляются заранее с учётом бизнес-логики.

Влияние временной зоны и нормализация дат

При использовании строковых дат Flatpickr приводит их к локальному контексту времени браузера. Это может влиять на поведение при переходах между днями в системах с различными часовыми поясами.

Для устранения неоднозначностей рекомендуется:

  • использовать ISO-формат YYYY-MM-DD
  • избегать передачи строк с временем, если требуется только дата
  • при необходимости использовать Date-объекты

Производительность при большом количестве диапазонов

При увеличении количества диапазонов отключения происходит линейная проверка каждой даты. В большинстве интерфейсов это не создаёт проблем, однако при сотнях правил может наблюдаться снижение производительности.

Оптимизации включают:

  • объединение пересекающихся диапазонов
  • предварительную нормализацию правил
  • использование функций для сложной логики вместо множества объектов

Типовые сценарии применения

Отключение диапазонов используется в нескольких устойчивых моделях:

  • блокировка праздников и выходных периодов
  • запрет на бронирование в периоды обслуживания
  • ограничение доступа к историческим датам
  • моделирование расписаний с «окнами недоступности»
  • синхронизация с внешними календарными системами

Каждый из этих сценариев опирается на одну и ту же базовую механику проверки попадания даты в диапазон, реализованную внутри Flatpickr.