Метод setMoment

Метод setMoment является удобным инструментом для установки даты в календаре Pikaday с использованием объектов библиотеки Moment.js. В отличие от метода setDate, который работает с объектами JavaScript Date, setMoment позволяет напрямую интегрировать календарь с мощной системой обработки дат Moment.js, обеспечивая гибкость в форматировании, локализации и манипуляциях с датами.


Синтаксис

pikadayInstance.setMoment(momentDate);

Параметры:

  • momentDate — объект типа Moment из библиотеки Moment.js, представляющий дату, которую требуется установить в календаре.

Возвращаемое значение: Метод возвращает текущий экземпляр Pikaday, что позволяет использовать цепочку вызовов методов (chaining).


Основные возможности

  1. Установка даты календаря: Метод напрямую изменяет текущую выбранную дату календаря на переданную дату Moment.js. При этом автоматически обновляется отображение календаря и связанное текстовое поле (если оно указано в опции field при инициализации Pikaday).

  2. Синхронизация с объектами Moment.js: Любые операции с датами, выполненные через Moment.js (например, добавление дней, изменение месяца или года), можно безопасно применять к Pikaday через setMoment. Это позволяет использовать весь спектр возможностей Moment.js при работе с календарём.

  3. Автоматическая валидация: Если переданная дата выходит за пределы minDate или maxDate, Pikaday корректно ограничивает значение и не допускает установки недопустимой даты.


Примеры использования

// Создание экземпляра Pikaday
var picker = new Pikaday({
    field: document.getElementById('datepicker'),
    format: 'DD.MM.YYYY',
    minDate: new Date(2020, 0, 1),
    maxDate: new Date(2030, 11, 31)
});

// Создание объекта Moment.js
var momentDate = moment('2026-06-02', 'YYYY-MM-DD');

// Установка даты через setMoment
picker.setMoment(momentDate);

В данном примере календарь устанавливает выбранную дату на 2 июня 2026 года и обновляет текстовое поле с указанным форматом DD.MM.YYYY.


Работа с локализацией

Pikaday поддерживает локализацию через Moment.js. Если установлен соответствующий язык, метод setMoment автоматически отображает дату в соответствии с локализацией:

moment.locale('ru');
var picker = new Pikaday({ field: document.getElementById('datepicker') });
picker.setMoment(moment('2026-06-02'));

В этом случае календарь корректно отображает дни недели и названия месяцев на русском языке, при этом выбранная дата синхронизирована с объектом Moment.js.


Примечания по использованию

  • setMoment не создает новый объект даты внутри Pikaday, а использует предоставленный объект Moment.js как источник информации о дате.
  • После вызова setMoment значение, возвращаемое методом getDate, будет объектом Date, соответствующим выбранной дате.
  • Метод удобно использовать при интеграции с динамическими данными, когда даты приходят из серверного API в формате, поддерживаемом Moment.js.
  • Для отмены установленной даты можно использовать setMoment(null) — это очистит выбранное значение календаря и текстовое поле (если поле было задано).

Отличия от setDate

Особенность setDate setMoment
Тип аргумента Date Moment
Форматирование Зависит от формата Pikaday Позволяет использовать форматирование Moment.js
Локализация Зависит от Pikaday Поддержка локализации через Moment.js
Совместимость Чистый JavaScript Интеграция с Moment.js

Использование setMoment особенно оправдано, когда проект уже активно использует Moment.js для обработки и форматирования дат, так как это снижает необходимость конвертации между Date и Moment вручную.


Практические рекомендации

  • При работе с серверными данными, приходящими в формате ISO (YYYY-MM-DD), сразу создавать объект Moment и передавать его в setMoment.
  • Совмещать с методами Moment.js для манипуляций с датой: add, subtract, startOf, endOf.
  • Для поддержки мультиязычности сначала установить локаль Moment.js через moment.locale(), а затем вызвать setMoment.

Метод setMoment обеспечивает плавную интеграцию Pikaday с библиотекой Moment.js, упрощая работу с динамическими, локализованными и форматированными датами.