Работа с формами

Moment.js предоставляет мощный и гибкий инструмент для работы с датами и временем в JavaScript. Одним из ключевых аспектов является возможность создания объектов даты из различных форматов, их парсинга и преобразования.

Создание объектов даты

Объект Moment можно создать несколькими способами:

  1. Текущая дата и время
const now = moment();

now содержит текущую дату и время в момент выполнения кода.

  1. Дата из строки
const dateFromString = moment("2026-05-22", "YYYY-MM-DD");

Здесь используется строгий формат YYYY-MM-DD, который позволяет точно указать порядок элементов даты. Важно: при указании формата, Moment.js корректно интерпретирует дату, избегая ошибок с локальными настройками.

  1. Дата из компонентов
const specificDate = moment([2026, 4, 22, 15, 30]); // месяц считается с 0

Массив [год, месяц, день, часы, минуты, секунды, миллисекунды] позволяет создавать даты с точной спецификацией времени. Месяцы нумеруются с нуля, что важно учитывать при работе с календарными данными.


Форматы вывода и парсинга

Moment.js поддерживает широкий спектр форматов для вывода и разбора строковых дат.

Форматы для парсинга

Основные символы формата:

  • YYYY – полный год (например, 2026)
  • YY – последние две цифры года (например, 26)
  • MM – месяц с ведущим нулем (01–12)
  • DD – день месяца с ведущим нулем (01–31)
  • HH – часы в 24-часовом формате (00–23)
  • mm – минуты (00–59)
  • ss – секунды (00–59)

Пример разбора строки:

const parsedDate = moment("22/05/2026 15:30", "DD/MM/YYYY HH:mm");

Такой подход гарантирует корректное определение даты даже при нестандартном порядке компонентов.

Форматы для вывода

Метод format позволяет преобразовать объект Moment в строку:

const formatted = moment().format("YYYY-MM-DD HH:mm:ss");

Результат: "2026-05-22 15:30:45". Можно комбинировать различные символы формата для создания удобного вида даты и времени.


Локализация и работа с языковыми форматами

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

moment.locale('ru');
const dateRu = moment().format('LLLL'); // Пятница, 22 мая 2026 г., 15:30

Особенности локализации:

  • Названия месяцев и дней недели автоматически адаптируются под выбранную локаль.
  • Форматы даты и времени подстраиваются под привычные для региона стандарты.

Валидация и строгий парсинг

При работе с формами важно проверять корректность введённых пользователем данных. Moment.js предоставляет метод isValid():

const invalidDate = moment("32/05/2026", "DD/MM/YYYY", true);
console.log(invalidDate.isValid()); // false

Третий параметр true включает строгий режим, который предотвращает автоматическую корректировку некорректных дат.


Манипуляции с датами

Moment.js позволяет добавлять или вычитать единицы времени, что упрощает работу с формами для расчёта сроков:

const deadline = moment("2026-05-22").add(7, 'days'); // через 7 дней
const weekAgo = moment().subtract(1, 'weeks'); // неделю назад

Поддерживаются следующие единицы:

  • years, months, weeks, days, hours, minutes, seconds, milliseconds

Методы можно цепочкой комбинировать:

const future = moment().add(1, 'month').subtract(3, 'days');

Сравнение дат

Для проверки сроков, дат рождения или дедлайнов удобно использовать методы сравнения:

  • isBefore() – проверяет, находится ли дата раньше другой
  • isAfter() – проверяет, находится ли дата позже другой
  • isSame() – проверяет равенство дат с возможностью указания единицы (day, month, year)
const start = moment("2026-05-22");
const end = moment("2026-06-01");

console.log(start.isBefore(end)); // true
console.log(start.isSame(end, 'month')); // false

Интервалы и разница между датами

Для расчёта интервалов между датами используется метод diff:

const date1 = moment("2026-05-01");
const date2 = moment("2026-05-22");

const daysDiff = date2.diff(date1, 'days'); // 21
const monthsDiff = date2.diff(date1, 'months'); // 0

Метод diff позволяет вычислять разницу в различных единицах времени, что полезно для форм с расчётом продолжительности.


Работа с временными зонами

Для форм, где важна корректная зона времени, можно использовать Moment Timezone (расширение Moment.js):

const moscowTime = moment.tz("2026-05-22 15:30", "Europe/Moscow");
console.log(moscowTime.format()); // 2026-05-22T15:30:00+03:00

Это позволяет безопасно хранить и отображать даты, учитывая локальные часовые пояса.


Вывод

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