Moment.js предоставляет мощный и гибкий инструмент для работы с датами и временем в JavaScript. Одним из ключевых аспектов является возможность создания объектов даты из различных форматов, их парсинга и преобразования.
Объект Moment можно создать несколькими способами:
const now = moment();
now содержит текущую дату и время в момент выполнения
кода.
const dateFromString = moment("2026-05-22", "YYYY-MM-DD");
Здесь используется строгий формат YYYY-MM-DD, который
позволяет точно указать порядок элементов даты. Важно:
при указании формата, Moment.js корректно интерпретирует дату, избегая
ошибок с локальными настройками.
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 обеспечивает универсальные средства работы с формами даты и времени, включая парсинг, форматирование, локализацию, валидацию, манипуляции и сравнение. Использование строгого формата, локализации и методов проверки гарантирует корректную работу с пользовательскими вводами в любых веб-приложениях.