Механизм weekSelect расширяет стандартный календарь Flatpickr возможностью выбора не отдельной даты, а целой недели целиком. Логика работы плагина основана на перехвате событий наведения и клика по строке недели в календарной сетке и преобразовании выбора в диапазон дат, соответствующий началу и концу недели.
Flatpickr по умолчанию оперирует единичными датами или диапазонами при включённом режиме range. weekSelect добавляет дополнительный слой абстракции:
Ключевая особенность заключается в том, что плагин не заменяет механизм выбора, а лишь управляет входными значениями, передаваемыми в основной движок Flatpickr.
Стандартная интеграция выполняется через массив plugins при инициализации календаря.
import flatpickr from "flatpickr";
import weekSelect from "flatpickr/dist/plugins/weekSelect/weekSelect";
flatpickr("#calendar", {
plugins: [weekSelect({})]
});
Плагин не требует обязательных параметров, но допускает передачу конфигурации, связанной с локализацией и началом недели.
При активации weekSelect меняется логика клика:
Пример результата:
2026-06-01 to 2026-06-07
Фактически это эквивалент:
[
"2026-06-01",
"2026-06-07"
]
Один из ключевых аспектов работы плагина — вычисление границ недели. В зависимости от локали и конфигурации календаря неделя может начинаться:
Flatpickr использует параметры locale для определения этого поведения:
flatpickr("#calendar", {
locale: {
firstDayOfWeek: 1
},
plugins: [weekSelect()]
});
Изменение firstDayOfWeek напрямую влияет на вычисление диапазона.
Плагин добавляет дополнительные CSS-классы к строкам календаря:
week — строка неделиselected — активная неделяhover — подсветка при наведенииСтруктура DOM становится более семантической: каждая строка
<tr> получает поведение интерактивного блока.
Пример стилизации:
.flatpickr-week {
background: transparent;
}
.flatpickr-week.selected {
background: rgba(0, 123, 255, 0.15);
}
.flatpickr-week:hover {
background: rgba(0, 123, 255, 0.08);
}
weekSelect фактически эмулирует поведение range-режима, поэтому возможны два подхода:
flatpickr("#calendar", {
plugins: [weekSelect()]
});
В этом случае плагин самостоятельно формирует диапазон.
flatpickr("#calendar", {
mode: "range",
plugins: [weekSelect()]
});
Такой вариант используется реже, так как может дублировать логику обработки диапазонов.
Flatpickr сохраняет стандартные callback-и, но weekSelect влияет на входные данные.
flatpickr("#calendar", {
plugins: [weekSelect()],
onChange: function(selectedDates, dateStr, instance) {
console.log(selectedDates);
}
});
В selectedDates всегда приходит массив из двух дат: начало и конец недели.
Отображение строки в input формируется автоматически, но может быть переопределено через dateFormat:
flatpickr("#calendar", {
dateFormat: "Y-m-d",
plugins: [weekSelect()]
});
При этом диапазон будет выводиться как:
2026-06-01 - 2026-06-07
Важный аспект работы плагина связан с локалями Flatpickr. В разных странах неделя интерпретируется по-разному:
Плагин не фиксирует это поведение самостоятельно, а полностью зависит от locale:
import { Russian } from "flatpickr/dist/l10n/ru.js";
flatpickr("#calendar", {
locale: Russian,
plugins: [weekSelect()]
});
Механизм weekSelect имеет ряд технических особенностей:
При использовании disabled дат внутри недели возможны ситуации, когда визуально неделя выделена, но часть дат недоступна.
На практике weekSelect применяется в системах, где данные агрегируются по неделям:
Основная ценность заключается в снижении когнитивной нагрузки при выборе диапазона дат.
Хотя плагин имеет минимальный набор настроек, его поведение можно расширять через комбинацию API Flatpickr:
flatpickr("#calendar", {
plugins: [weekSelect()],
onChange: (dates) => {
const [start, end] = dates;
// пользовательская логика обработки недели
}
});
Дополнительная обработка позволяет:
В некоторых системах используется ISO 8601, где неделя всегда начинается с понедельника и имеет строгую нумерацию.
Flatpickr не реализует ISO-нумерацию напрямую, но weekSelect можно адаптировать:
При переходе между месяцами weekSelect сохраняет логическую целостность недели:
weekSelect преобразует Flatpickr из календаря точечного выбора в инструмент недельной агрегации:
Такой подход делает компонент пригодным для задач, где временные данные всегда группируются по неделям и требуется единый стандарт выбора периода.