В библиотеке Pikaday механизм выбора диапазона дат реализуется через
расширение функциональности календаря, позволяя фиксировать начальную и
конечную границы диапазона. Метод setStartRange отвечает за
установку начальной даты диапазона выделения и является ключевым
элементом при работе с range-подобным поведением календаря.
Данный метод используется в сценариях, где требуется интерактивное выделение периода: бронирование, фильтрация по датам, выбор временных интервалов в аналитических интерфейсах. Его роль заключается не просто в установке значения, а в управлении внутренним состоянием выделения диапазона.
Метод вызывается на экземпляре Pikaday:
picker.setStartRange(date);
date — объект Date, который определяет
начальную границу диапазона.Метод не возвращает значимого значения, его результат выражается в изменении внутреннего состояния календаря.
При использовании расширения range в Pikaday обычно задействуются две ключевые переменные состояния:
startRange — начало диапазонаendRange — конец диапазонаМетод setStartRange изменяет только первую из них,
оставляя вторую неизменной.
Внутренне это может выглядеть как:
this._o.startRange = date;
this.draw();
или в расширенных реализациях:
this._rangeStart = date;
this._inSelectionMode = true;
После установки начальной даты календарь перерисовывается для визуального отображения состояния выбора.
Если диапазон ранее не был задан, метод фиксирует новую отправную точку:
picker.setStartRange(new Date(2026, 0, 10));
Результат:
При наличии уже установленного диапазона вызов
setStartRange обычно приводит к сбросу предыдущего
состояния:
picker.setStartRange(new Date(2026, 0, 5));
picker.setEndRange(new Date(2026, 0, 15));
picker.setStartRange(new Date(2026, 0, 20));
Результат:
Если в метод передаётся некорректный объект:
picker.setStartRange("2026-01-10");
поведение зависит от реализации:
Date, поэтому строка может
привести к игнорированию значенияnew Date(value)setEndRangeМетод setStartRange практически всегда используется
совместно с setEndRange, образуя полноценный диапазон.
picker.setStartRange(new Date(2026, 5, 1));
picker.setEndRange(new Date(2026, 5, 10));
Логика взаимодействия:
setStartRange фиксирует левую границуsetEndRange фиксирует правую границуЕсли установить конечную дату меньше начальной, возможны сценарии автоматической нормализации или инверсии диапазона, в зависимости от конфигурации.
Типичный сценарий:
picker.on('select', function(date) {
if (!picker.getStartRange()) {
picker.setStartRange(date);
} else {
picker.setEndRange(date);
}
});
Здесь setStartRange играет роль первого шага
интерактивного выбора.
Часто применяется при фильтрации данных:
picker.setStartRange(new Date(2026, 0, 1));
picker.setEndRange(new Date(2026, 0, 31));
Используется для:
Для очистки состояния:
picker.setStartRange(null);
picker.setEndRange(null);
или через пересоздание экземпляра.
При передаче null поведение зависит от реализации, но в
большинстве случаев это приводит к очистке начальной границы.
После вызова setStartRange выполняется перерасчёт
визуального состояния:
В DOM это обычно отражается через классы вроде:
is-inrangeis-startrangeis-selectedМетод учитывает настройки ограничения дат:
minDatemaxDatedisableDayFnЕсли установленная начальная дата выходит за допустимые границы, возможны следующие варианты поведения:
boundПри использовании bound-инпутов (двух связанных полей: начало и конец):
new Pikaday({
field: document.getElementById('start'),
bound: true
});
setStartRange часто применяется для синхронизации
значений между двумя календарями.
Пример логики:
startPicker.setStartRange(date);
endPicker.setMinDate(date);
Это обеспечивает невозможность выбора конечной даты раньше начальной.
picker.setStartRange("2026-01-10");
Ошибка: отсутствие нормализации входных данных в базовой реализации.
picker.setEndRange(new Date(2026, 0, 1));
picker.setStartRange(new Date(2026, 0, 10));
Результат: логически некорректный диапазон.
В некоторых кастомных форках Pikaday требуется явный вызов:
picker.setStartRange(date);
picker.draw();
Если draw() не вызывается автоматически, UI может не
обновиться.
При изменении месяца:
startRange сохраняетсяЭто важно при выборе длинных периодов (несколько месяцев подряд).
function updateRange(start, end) {
picker.setStartRange(start);
picker.setEndRange(end);
}
Используется при:
picker.on('select', function(date) {
if (!picker.getStartRange()) {
picker.setStartRange(date);
picker.setMinDate(date);
} else {
picker.setEndRange(date);
}
});
Такой подход предотвращает выбор некорректного диапазона.
При установке начальной даты библиотека добавляет специальные классы:
is-startrangeis-inrangeis-endrangeЭто позволяет полностью контролировать визуализацию через стили:
.is-startrange {
background-color: #2d7ff9;
color: #fff;
}
При интерактивной работе пользователь может переопределять старт диапазона:
setStartRange повторноТаким образом метод участвует в цикле управления состоянием выбора.
Расширения Pikaday, добавляющие range selection, часто переопределяют поведение:
В таких случаях setStartRange становится точкой
синхронизации между логикой UI и состоянием календаря.
Метод относится к категории низкоуровневых API управления состоянием выбора дат. Он:
Его значение заключается в формировании базовой точки отсчёта для всех операций диапазона дат внутри календаря.