Серверная разработка на Node.js

Moment.js — это библиотека для работы с датами и временем в JavaScript, которая упрощает их создание, форматирование, парсинг и вычисления. Для использования в Node.js необходимо установить библиотеку через npm:

npm install moment

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

const moment = require('moment');

Важный момент: библиотека является модульной и поддерживает подключение локализаций, что позволяет работать с датами на разных языках.


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

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

const now = moment();
console.log(now.format()); // Например: 2026-05-22T14:35:20+03:00

Создание даты из строки или формата:

const dateFromString = moment("2026-05-22", "YYYY-MM-DD");

Создание даты из отдельных компонентов:

const dateFromComponents = moment({ year: 2026, month: 4, day: 22, hour: 14, minute: 30 });
// Обратите внимание: месяц нумеруется с 0 (0 — январь, 11 — декабрь)

Создание даты из Unix timestamp:

const dateFromTimestamp = moment.unix(1685000000);

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

Метод format() позволяет выводить дату в различных форматах:

moment().format('YYYY-MM-DD'); // 2026-05-22
moment().format('DD/MM/YYYY'); // 22/05/2026
moment().format('dddd, MMMM Do YYYY, h:mm:ss a'); // Friday, May 22nd 2026, 2:35:20 pm

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

  • YYYY — полный год
  • YY — две последние цифры года
  • MM — месяц (01–12)
  • DD — день месяца (01–31)
  • dddd — название дня недели
  • HH — часы в 24-часовом формате
  • hh — часы в 12-часовом формате
  • mm — минуты
  • ss — секунды
  • a — am/pm

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

Moment.js предоставляет методы для сложных вычислений с датами.

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

const date = moment();
date.add(7, 'days');       // Добавить 7 дней
date.subtract(3, 'months'); // Вычесть 3 месяца

Поддерживаются единицы: years, months, weeks, days, hours, minutes, seconds.

Установка конкретных компонентов даты:

const date = moment();
date.year(2025).month(0).date(15); // 15 января 2025

Получение отдельных компонентов:

const date = moment();
console.log(date.year());   // 2026
console.log(date.month());  // 4 (май)
console.log(date.date());   // 22
console.log(date.day());    // 5 (пятница, день недели от 0 до 6)

Работа с локализацией

Moment.js поддерживает локализации для корректного отображения дней недели и месяцев.

require('moment/locale/ru');
moment.locale('ru');

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

Сравнение и проверка дат

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

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

Проверка диапазонов:

const start = moment('2026-05-01');
const end = moment('2026-05-31');
const date = moment('2026-05-22');

console.log(date.isBetween(start, end)); // true

Вычисление разницы между датами

Метод diff() возвращает разницу между двумя датами:

const start = moment('2026-05-01');
const end = moment('2026-05-22');

console.log(end.diff(start, 'days')); // 21
console.log(end.diff(start, 'weeks')); // 3

Можно использовать duration для работы с периодами времени:

const duration = moment.duration(end.diff(start));
console.log(duration.asDays());   // 21
console.log(duration.asHours());  // 504

Форматирование и парсинг ISO и UTC

Работа с UTC:

const utcDate = moment.utc('2026-05-22T12:00:00Z');
console.log(utcDate.local().format()); // конвертация в локальное время

Парсинг ISO строк:

const isoDate = moment("2026-05-22T14:35:00+03:00");
console.log(isoDate.format('YYYY-MM-DD HH:mm:ss')); // 2026-05-22 14:35:00

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

Манипуляция с календарными датами:

console.log(moment().add(1, 'month').calendar()); // Следующий месяц

Отображение относительных времен:

const date = moment().subtract(3, 'days');
console.log(date.fromNow()); // 3 дня назад

Работа с цепочкой методов:

Moment.js позволяет комбинировать операции:

const date = moment()
  .add(1, 'week')
  .subtract(2, 'days')
  .hour(9)
  .minute(30);

console.log(date.format()); // Например: 2026-05-27T09:30:00+03:00

Moment.js продолжает оставаться мощным инструментом для работы с датами в Node.js, упрощая любые манипуляции, форматирование и сравнения времени. Его богатый API и поддержка локализации делают его удобным решением для серверной разработки.