Moment.js в JavaScript: работа с датами и временем

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

Установка Moment.js

Через npm или yarn

npm install moment
yarn add moment

Подключение через CDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.30.1/moment.min.js"></script>

После подключения библиотека будет доступна через объект moment.

Создание даты

Текущая дата и время

const now = moment();
console.log(now.format()); // '2024-03-07T12:00:00+00:00' (примерный вывод)

Создание даты из строки

const date = moment('2024-02-15', 'YYYY-MM-DD');
console.log(date.format()); // '2024-02-15T00:00:00+00:00'

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

const dateFromJS = moment(new Date());
console.log(dateFromJS.format('YYYY-MM-DD HH:mm:ss'));

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

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

const now = moment();
console.log(now.format('YYYY-MM-DD')); // 2024-03-07
console.log(now.format('DD/MM/YYYY')); // 07/03/2024
console.log(now.format('MMMM Do YYYY, h:mm:ss a')); // March 7th 2024, 12:00:00 pm

Форматирование с днями недели

console.log(now.format('dddd, MMMM Do YYYY')); // Thursday, March 7th 2024

Работа с датами

Добавление и вычитание времени

const futureDate = moment().add(7, 'days');
console.log(futureDate.format('YYYY-MM-DD')); // Дата через 7 дней

const pastDate = moment().subtract(1, 'month');
console.log(pastDate.format('YYYY-MM-DD')); // Дата месяц назад

Разница между датами

const start = moment('2024-01-01', 'YYYY-MM-DD');
const end = moment('2024-03-01', 'YYYY-MM-DD');

console.log(end.diff(start, 'days')); // 60
console.log(end.diff(start, 'months')); // 2

Парсинг и проверка дат

Проверка корректности даты

console.log(moment('2024-02-30', 'YYYY-MM-DD', true).isValid()); // false
console.log(moment('2024-02-28', 'YYYY-MM-DD', true).isValid()); // true

Проверка, является ли дата текущей

console.log(moment().isSame(moment(), 'day')); // true

Проверка, находится ли дата в прошлом или будущем

console.log(moment('2023-12-31').isBefore(moment())); // true (прошедшая дата)
console.log(moment('2025-01-01').isAfter(moment())); // true (будущая дата)

Локализация дат

Moment.js поддерживает локализацию дат на разные языки.

Установка локали

moment.locale('ru');
console.log(moment().format('LLLL')); // четверг, 7 марта 2024 г., 12:00

Возвращение к английской локали

moment.locale('en');
console.log(moment().format('LLLL')); // Thursday, March 7, 2024 12:00 PM

Альтернатива Moment.js

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

  • Day.js — легковесная альтернатива Moment.js с аналогичным API.
  • date-fns — современный инструмент с модульным подходом.
  • Luxon — библиотека от создателей Moment.js с поддержкой часовых поясов.