Что такое Moment.js?

Moment.js — широко используемая библиотека JavaScript для разбора, валидации, манипуляций и форматирования дат. До появления современных альтернатив Moment.js был де‑факто стандартом работы с датами в приложениях JavaScript. Библиотека предоставляет чистый, цепочечный API, который делает работу с датами интуитивной и простой. Хотя существуют более новые библиотеки, такие как date-fns и Luxon, Moment.js по‑прежнему активно используется в наследуемом коде и поддерживается для исправления ошибок. Понимание Moment.js необходимо разработчикам, работающим с существующими проектами, которые полагаются на неё.

Почему стоит использовать библиотеку для работы с датами?

Встроенный объект Date в JavaScript известен своей сложностью. Он ведёт себя непоследовательно в разных браузерах, имеет запутанную индексацию месяцев (0‑11 вместо 1‑12), ограниченные возможности форматирования и не поддерживает часовые пояса из коробки. Библиотеки дат, такие как Moment.js, решают эти проблемы, предоставляя согласованный, хорошо документированный API. Они автоматически обрабатывают крайние случаи, такие как переходы на летнее время, високосные годы и локализованное форматирование, избавляя разработчиков от написания ошибко‑подверженной логики работы с датами с нуля.

Описание инструмента

Moment.js Playground — интерактивная среда в браузере для экспериментов с библиотекой Moment.js. Пишите и исполняйте JavaScript‑код непосредственно в редакторе с полным доступом к Moment.js и Moment Timezone. Плейграунд автоматически запускает ваш код по мере ввода (с дебаунсом) и выводит весь вывод консоли в панель в стиле терминала ниже. Это идеальный инструмент для изучения Moment.js, тестирования строк форматирования дат, отладки вычислений дат и прототипирования логики, связанной со временем, без настройки среды разработки.

Примеры

Форматирование текущей даты:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Output: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Output: Monday, 3:45 PM

Разбор разных форматов дат:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0-indexed)

Вычисление относительного времени:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

Арифметика дат:

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

Работа с длительностями:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

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

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

Работа с часовыми поясами:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

Возможности

  • Полная библиотека Moment.js: Доступ ко всем функциям Moment.js, включая разбор, форматирование, манипуляцию и сравнение
  • Поддержка часовых поясов: Moment Timezone предзагружен для работы с часовыми поясами по всему миру
  • Live‑выполнение кода: Код запускается автоматически по мере ввода с интеллектуальным дебаунсом
  • Встроенный терминал: Просмотр вывода консоли мгновенно без открытия инструментов разработчика браузера
  • Подсветка синтаксиса: Подсветка синтаксиса JavaScript для лучшей читаемости кода
  • Обработка ошибок: Ошибки времени выполнения отображаются ясно в выводе терминала

Сценарии использования

  • Изучение Moment.js: Экспериментируйте с API и получайте результаты сразу без настройки проекта
  • Тестирование строк формата: Пробуйте разные токены формата, чтобы получить точный вывод даты, который вам нужен
  • Отладка вычислений дат: Тестируйте сложную арифметику дат перед внедрением в приложение
  • Конверсия часовых поясов: Быстро преобразуйте время между различными часовыми поясами
  • Поддержка наследуемого кода: Тестируйте фрагменты кода Moment.js при обслуживании существующих приложений

Часто используемые токены формата

Токен Описание Пример
YYYY Год из 4 цифр 2025
YY Год из 2 цифр 25
MM Месяц из 2 цифр 01‑12
MMM Краткое название месяца Jan, Feb
MMMM Полное название месяца January
DD День из 2 цифр 01‑31
Do День с порядковым суффиксом 1st, 2nd, 3rd
dddd Полное название дня недели Monday
ddd Краткое название дня недели Mon
HH Час в 24‑часовом формате 00‑23
hh Час в 12‑часовом формате 01‑12
mm Минуты 00‑59
ss Секунды 00‑59
A AM/PM (верхний регистр) AM, PM
a am/pm (нижний регистр) am, pm
z Аббревиатура часового пояса EST, PST
Z Смещение часового пояса +05:00

Справочник часто используемых методов

Метод Описание Пример
moment() Создать текущий момент moment()
format(string) Форматировать в строку moment().format("YYYY-MM-DD")
add(n, unit) Прибавить время moment().add(7, "days")
subtract(n, unit) Вычесть время moment().subtract(1, "month")
startOf(unit) Начало единицы moment().startOf("week")
endOf(unit) Конец единицы moment().endOf("month")
fromNow() Относительное время moment("2025-01-01").fromNow()
diff(moment) Разница momentA.diff(momentB, "days")
isBefore(moment) Является ранее momentA.isBefore(momentB)
isAfter(moment) Является позже momentA.isAfter(momentB)
isSame(moment, unit) Является тем же momentA.isSame(momentB, "month")
isValid() Проверка валидности moment("invalid").isValid()
clone() Создать копию moment().clone()
tz(zone) Перевести в часовой пояс moment().tz("America/New_York")

Единицы времени

Moment.js поддерживает следующие единицы времени для операций add, subtract, startOf, endOf и diff:

  • years / y
  • quarters / Q
  • months / M
  • weeks / w
  • days / d
  • hours / h
  • minutes / m
  • seconds / s
  • milliseconds / ms