Параметр defaultDate определяет начальное значение даты,
которое будет установлено в календаре при инициализации экземпляра. Он
влияет на поведение виджета в момент первого рендера и задаёт внутреннее
состояние выбранной даты до взаимодействия пользователя с
интерфейсом.
defaultDate принимает объект типа Date
JavaScript. Передача строк, чисел или иных форматов напрямую не является
стандартной практикой и может привести к некорректному поведению или
необходимости предварительного преобразования.
Корректная форма:
defaultDate: new Date(2026, 0, 15)
Здесь используется стандартный конструктор
Date(year, monthIndex, day), где месяц начинается с
нуля.
При указании defaultDate библиотека устанавливает
внутреннюю дату выбора, даже если поле ввода остаётся пустым или не
синхронизировано с полем field.
В момент создания экземпляра выполняется следующая логика:
setDefaultDatedefaultDate задан, он применяется как активная
датаВажно, что defaultDate не обязательно отображается в
поле ввода, если не задано setInputValue или пользователь
не активировал выбор.
setDate и field.valuedefaultDate часто путают с методами установки значения
после инициализации.
defaultDateИспользуется только на этапе создания экземпляра. Определяет стартовое состояние.
setDateМетод, который изменяет выбранную дату после инициализации:
picker.setDate(new Date(2026, 5, 10))
field.valueHTML-значение input-поля, которое может быть не синхронизировано с внутренним состоянием календаря.
defaultDateЕсли параметр не указан:
new Date()Это поведение важно для форм, где требуется явный выбор даты без предустановленных значений.
setDefaultDateВ некоторых конфигурациях используется параметр
setDefaultDate, который изменяет поведение применения
defaultDate.
setDefaultDate: true,
defaultDate: new Date(2026, 0, 1)
Если setDefaultDate включён:
defaultDate автоматически применяется как
выбранная датаЕсли setDefaultDate отключён:
defaultDate влияет только на внутреннее состояниеdefaultDate: new Date()
Используется в интерфейсах, где важно предложить текущую дату как стартовую точку, но оставить возможность изменения.
defaultDate: new Date(2026, 11, 31)
Применяется в формах планирования, где логика предполагает выбор даты относительно конкретного периода.
В сочетании с minDate и maxDate:
minDate: new Date(2026, 0, 1),
maxDate: new Date(2026, 11, 31),
defaultDate: new Date(2026, 6, 1)
В этом случае defaultDate должен находиться внутри
диапазона. Если он выходит за пределы, библиотека может скорректировать
его или игнорировать в зависимости от конфигурации.
Если в defaultDate передано некорректное значение:
undefined или null → игнорируетсяDate, но
нестабильноDate (Invalid Date) →
значение не применяетсяПример проблемного случая:
defaultDate: new Date("invalid-date")
Такое значение приводит к отсутствию предустановленной даты.
defaultDate напрямую влияет на:
Если defaultDate находится в другом месяце, календарь
автоматически переключается на соответствующий месяц.
При наличии связанного поля ввода (field) поведение
зависит от конфигурации:
setDefaultDatedefaultDate
игнорируется в пользу field.valuedefaultDate перестаёт
влиять на состояниеВ реальных интерфейсах defaultDate используется как
механизм инициализации состояния, но не как источник истины после
загрузки компонента. Его роль ограничена первым рендером и начальной
синхронизацией календаря.
При архитектуре форм с серверной предзагрузкой данных
defaultDate часто заменяется динамическим значением,
вычисленным на основе бизнес-логики:
defaultDate: user.lastVisitDate || new Date()
defaultDate не влияет на формат отображения даты. За
формат отвечает параметр format, и оба параметра работают
независимо:
defaultDate задаёт значениеformat определяет способ отображенияДаже при одинаковом значении даты отображение может различаться:
format: 'DD.MM.YYYY',
defaultDate: new Date(2026, 0, 1)
При создании нескольких экземпляров календаря важно учитывать, что
каждый экземпляр хранит собственное значение defaultDate.
Изменение объекта Date, переданного в один экземпляр, не
влияет на другие, если не используется общая ссылка на объект.
const sharedDate = new Date(2026, 0, 1)
new Pikaday({ defaultDate: sharedDate })
new Pikaday({ defaultDate: sharedDate })
Несмотря на общую ссылку, внутреннее состояние каждого экземпляра изолировано.