Возвращаемые значения в Flatpickr формируются на нескольких уровнях:
через API-инстанс, через колбэки событий, через методы преобразования
дат и через состояние самого инпута. Тип возвращаемых данных зависит от
режима работы календаря, конфигурации формата и выбранных опций, таких
как mode, dateFormat, enableTime,
altInput.
Внутреннее представление даты в Flatpickr почти всегда строится
вокруг объекта Date. Это ключевой момент архитектуры
библиотеки.
Основные формы представления:
Date — основной тип внутри инстансаstring — форматированное значение для inputnumber — timestamp (в отдельных методах и
преобразованиях)Array<Date> — при множественном выбореПри этом UI-слой и API-слой строго разделены: пользователь
взаимодействует со строками, а библиотека оперирует объектами
Date.
Инициализация календаря возвращает экземпляр Flatpickr:
const fp = flatpickr("#input", {
dateFormat: "Y-m-d"
});
fp — это объект-инстанс, содержащий полный набор методов
управления и состояния.
fp.selectedDates — массив выбранных датfp.currentYear, fp.currentMonth — текущее
отображениеfp.config — конфигурацияfp.input — DOM-элемент inputfp.calendarContainer — DOM-контейнер календаряselectedDates — центральный источник данных о
выборе.
fp.selectedDates // Array<Date>
[
Date("2026-06-01T00:00:00")
]
Массив всегда содержит либо 0, либо 1 элемент.
[
Date("2026-06-01"),
Date("2026-06-10"),
Date("2026-06-20")
]
[
Date("2026-06-01"),
Date("2026-06-15")
]
Первый элемент — начало диапазона, второй — конец.
Колбэк onChange является одним из основных источников
получения данных.
flatpickr("#input", {
onChange: function(selectedDates, dateStr, instance) {
// selectedDates → Array<Date>
// dateStr → string
// instance → Flatpickr instance
}
});
Всегда массив объектов Date, независимо от режима:
[Date][Date, Date, ...][startDate, endDate]Строковое представление выбранной даты:
"2026-06-01"
Формируется через dateFormat или
altFormat.
Ссылка на текущий инстанс календаря.
dateStr зависит от конфигурации:
{
dateFormat: "Y-m-d"
}
Результат:
2026-06-01
При изменении формата:
dateFormat: "d/m/Y"
Результат:
01/06/2026
Если включён enableTime:
2026-06-01 14:30
Метод setDate возвращает void, но изменяет
состояние инстанса:
fp.setDate("2026-06-01");
После вызова обновляются:
selectedDatesinput.valueПри необходимости можно передавать второй аргумент:
fp.setDate("2026-06-01", true);
true вызывает событие onChange.
Метод getDate возвращает дату в нескольких форматах:
fp.getDate(); // Date
Date
fp.getDate(true);
Возвращает timestamp:
1717200000000
fp.getDate(true, "Y-m-d");
Возвращает строку:
2026-06-01
В режиме диапазона (mode: "range") структура всегда
фиксирована:
selectedDates = [start, end]
Если диапазон не завершён:
selectedDates = [start]
Это важно для обработки UI-состояний:
mode: "multiple"
Каждый клик добавляет или удаляет элемент массива:
selectedDates = [Date, Date, Date]
Особенность: порядок соответствует хронологии выбора, а не сортировке (если не включены дополнительные настройки).
DOM-значение input всегда строковое:
fp.input.value
Пример:
2026-06-01, 2026-06-10
или:
2026-06-01 to 2026-06-10
Формат зависит от:
modedateFormatrangeSeparatorfp.parseDate("2026-06-01", "Y-m-d");
Возвращает:
Date
Если строка невалидна:
null
fp.formatDate(new Date(), "Y-m-d");
Возвращает:
string
Пример:
2026-06-01
При включённом времени:
enableTime: true
selectedDates включает точное время:
Date("2026-06-01T14:30:00")
Методы возвращают:
Метод очистки:
fp.clear();
Изменяет:
selectedDates = []
input.value = ""
UI синхронизируется с пустым состоянием.
При использовании altInput:
altInput: true,
altFormat: "F j, Y"
Фактические значения разделяются:
input.value → технический форматaltInput.value → человекочитаемый форматПример:
input.value → 2026-06-01
altInput.value → June 1, 2026
Все возвращаемые значения можно свести к нескольким слоям:
DateDateinput.value (string)altInput.value (string)Изменение опций влияет не на тип данных, а на их представление:
dateFormat → строкаmode → структура массиваenableTime → расширение DaterangeSeparator → формат строкиТипы остаются стабильными, меняется только сериализация данных.