Luxon от автора Moment

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

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

Объекты Moment создаются с помощью функции moment(). Возможны следующие варианты:

  • Текущая дата и время:
const now = moment();
  • Конкретная дата из строки:
const birthday = moment("1990-05-15", "YYYY-MM-DD");
  • Создание с использованием компонентов даты:
const date = moment([2026, 4, 22]); // Месяцы начинаются с 0
  • Создание из объекта JavaScript Date:
const dateFromJS = moment(new Date());

Форматирование дат

Moment.js предоставляет мощный механизм форматирования через метод format(). Формат задается строкой, где каждая буква соответствует компоненту даты или времени:

moment().format("YYYY-MM-DD HH:mm:ss"); // 2026-05-22 14:30:45

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

  • YYYY — полный год (2026)
  • YY — две последние цифры года (26)
  • MM — месяц с ведущим нулем (01–12)
  • M — месяц без ведущего нуля (1–12)
  • DD — день месяца с ведущим нулем (01–31)
  • D — день месяца без ведущего нуля (1–31)
  • HH — часы в 24-часовом формате (00–23)
  • hh — часы в 12-часовом формате (01–12)
  • mm — минуты с ведущим нулем (00–59)
  • ss — секунды с ведущим нулем (00–59)
  • A — AM/PM

Парсинг дат

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

const date1 = moment("22-05-2026", "DD-MM-YYYY");
const date2 = moment("May 22, 2026", "MMMM D, YYYY");

Если формат не указан, Moment пытается определить его автоматически, но это может привести к ошибкам при разных локалях.

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

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

const today = moment();
const nextWeek = today.add(7, "days");
const lastMonth = today.subtract(1, "months");

Поддерживаемые единицы:

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

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

Moment.js предлагает удобные методы для сравнения:

  • isBefore(), isAfter(), isSame()
const date1 = moment("2026-05-22");
const date2 = moment("2026-06-01");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2));  // false
console.log(date1.isSame(date2));   // false
  • isBetween() — проверяет, находится ли дата между двумя другими:
const start = moment("2026-05-01");
const end = moment("2026-05-31");
console.log(moment("2026-05-15").isBetween(start, end)); // true

Работа с локалями

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

moment.locale("ru");
console.log(moment().format("LLLL")); // пятница, 22 мая 2026 г., 14:30

Для переключения локали используется метод locale(), а для восстановления локали по умолчанию — moment.locale('en').

Относительное время

Относительное время отображается с помощью методов fromNow() и toNow():

const birthday = moment("1990-05-15");
console.log(birthday.fromNow()); // "36 лет назад"
console.log(moment().to(birthday)); // "через 36 лет"

Можно настроить отображение единиц времени, чтобы получить, например, только дни, часы или минуты.

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

Moment.js совместим с Moment Timezone для работы с разными часовыми поясами:

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

С помощью методов tz() и utcOffset() можно переводить дату между зонами и управлять смещением вручную.

Продвинутые возможности

  • Манипуляции с диапазонами дат: через moment-range можно работать с интервалами и проверять пересечения.
  • Проверка валидности даты: moment("invalid-date").isValid() позволяет убедиться, что дата корректна.
  • Разбор Unix-времени:
moment.unix(1621708800).format("YYYY-MM-DD HH:mm:ss"); 
  • Конвертация в стандартный Date:
const jsDate = moment().toDate();
  • Конвертация обратно в Moment:
const momentDate = moment(jsDate);

Moment.js остаётся одним из самых популярных инструментов для работы с датами в JavaScript, благодаря своей простоте, гибкости и поддержке широкого спектра операций.