Moment.js — популярная библиотека для работы с датой и
временем в JavaScript. Она предоставляет удобный API для:
До появления современного API Intl и библиотеки
Temporal Moment.js был фактическим стандартом работы с
датами в экосистеме JavaScript.
Пример создания объекта даты:
const moment = require('moment');
const now = moment();
console.log(now);
Объект moment представляет дату со множеством встроенных
методов.
npm install moment
Импорт в проекте:
const moment = require('moment');
или:
import moment from 'moment';
const now = moment();
console.log(now.format());
Метод format() преобразует объект в строку.
const date = moment('2025-10-15');
console.log(date.format());
Формат массива:
[год, месяц, день, часы, минуты, секунды]
Пример:
const date = moment([2025, 9, 15, 12, 30]);
console.log(date.format());
Важно помнить:
0;9.const jsDate = new Date();
const date = moment(jsDate);
console.log(date.format());
Одна из главных возможностей Moment.js — удобное форматирование.
const now = moment();
console.log(now.format('DD.MM.YYYY'));
Результат:
21.05.2026
| Токен | Описание |
|---|---|
D |
День |
DD |
День с ведущим нулём |
ddd |
Короткое название дня недели |
dddd |
Полное название дня недели |
Пример:
console.log(moment().format('dddd'));
| Токен | Описание |
|---|---|
M |
Номер месяца |
MM |
Месяц с нулём |
MMM |
Краткое название |
MMMM |
Полное название |
| Токен | Описание |
|---|---|
YY |
Две цифры года |
YYYY |
Полный год |
| Токен | Описание |
|---|---|
H |
Часы |
HH |
Часы с нулём |
m |
Минуты |
mm |
Минуты с нулём |
s |
Секунды |
ss |
Секунды с нулём |
console.log(
moment().format('DD.MM.YYYY')
);
console.log(
moment().format('DD.MM.YYYY HH:mm:ss')
);
console.log(
moment().format('D MMMM YYYY')
);
Moment.js умеет преобразовывать строки в даты.
const date = moment('2025-12-31');
console.log(date.format());
const date = moment(
'31-12-2025',
'DD-MM-YYYY'
);
console.log(date.format());
Это особенно важно при нестандартных форматах.
const date = moment('2025-15-99');
console.log(date.isValid());
Результат:
false
Moment.js позволяет получать отдельные компоненты.
console.log(moment().year());
console.log(moment().month());
Месяцы начинаются с нуля.
console.log(moment().date());
console.log(moment().day());
console.log(moment().hour());
console.log(moment().minute());
API Moment.js поддерживает мутацию объекта.
const date = moment();
date.year(2030);
console.log(date.format());
date.month(0);
Январь имеет индекс 0.
date.date(15);
date.hour(10);
date.minute(45);
date.second(20);
Moment.js активно использует chain API.
const date = moment()
.year(2026)
.month(5)
.date(10)
.hour(14)
.minute(30);
console.log(date.format());
Такой подход делает код компактным и читаемым.
const now = moment();
now.add(5, 'days');
console.log(now.format());
| Значение | Описание |
|---|---|
seconds |
Секунды |
minutes |
Минуты |
hours |
Часы |
days |
Дни |
weeks |
Недели |
months |
Месяцы |
years |
Годы |
moment().add(3, 'hours');
moment().add(2, 'months');
moment()
.add(1, 'year')
.add(2, 'months')
.add(10, 'days');
const date = moment();
date.subtract(7, 'days');
console.log(date.format());
Moment.js предоставляет удобные методы сравнения.
const d1 = moment('2025-01-01');
const d2 = moment('2026-01-01');
console.log(d1.isBefore(d2));
console.log(d2.isAfter(d1));
console.log(
d1.isSame(d2)
);
const start = moment('2025-01-01');
const end = moment('2025-01-10');
console.log(
end.diff(start, 'days')
);
Результат:
9
end.diff(start, 'hours');
end.diff(start, 'months');
end.diff(start, 'years');
console.log(
moment().unix()
);
const date = moment.unix(1700000000);
console.log(date.format());
Moment.js поддерживает множество языков.
import 'moment/locale/ru';
moment.locale('ru');
moment.locale('ru');
console.log(
moment().format('D MMMM YYYY')
);
Результат:
21 мая 2026
Moment.js умеет выводить время в человекочитаемом виде.
console.log(
moment().subtract(3, 'days').fromNow()
);
Результат:
3 дня назад
console.log(
moment().add(5, 'days').fromNow()
);
Результат:
через 5 дней
const date = moment();
console.log(
date.startOf('month').format()
);
console.log(
moment().endOf('day').format()
);
Объекты Moment изменяемы.
Это важная особенность библиотеки.
const d1 = moment();
const d2 = d1;
d2.add(1, 'day');
console.log(d1.format());
d1 тоже изменится.
const d1 = moment();
const d2 = d1.clone();
d2.add(1, 'day');
console.log(d1.format());
console.log(d2.format());
Теперь объекты независимы.
const jsDate = moment().toDate();
console.log(jsDate);
console.log(
moment().toString()
);
console.log(
moment().toJSON()
);
const utcDate = moment.utc();
console.log(utcDate.format());
utcDate.local();
const date = moment('2025-06-15');
const start = moment('2025-06-01');
const end = moment('2025-06-30');
console.log(
date.isBetween(start, end)
);
const deadline = moment('2025-12-31');
const now = moment();
if (now.isAfter(deadline)) {
console.log('Срок истёк');
} else {
console.log('Срок ещё действует');
}
const birthday = moment('1995-05-10');
const age = moment().diff(
birthday,
'years'
);
console.log(age);
const start = moment();
setTimeout(() => {
const end = moment();
console.log(
end.diff(start, 'seconds')
);
}, 5000);
Большинство методов изменяет исходный объект:
const date = moment();
date.add(1, 'day');
Это одна из главных особенностей библиотеки.
Moment.js автоматически распознаёт многие форматы:
moment('2025/12/31');
moment('31.12.2025');
moment('December 31 2025');
Однако для надёжности рекомендуется явно указывать формат.
moment()
.add(1, 'week')
.startOf('day')
.format('YYYY-MM-DD');
Moment.js считается legacy-проектом.
Основные причины:
Несмотря на это, Moment.js остаётся важной частью множества существующих проектов.
Moment.js построен поверх стандартного объекта Date.
Это позволяет:
Пример:
const jsDate = new Date();
const m = moment(jsDate);
console.log(m.format());
| Действие | Метод |
|---|---|
| Создание даты | moment() |
| Форматирование | format() |
| Добавление времени | add() |
| Вычитание времени | subtract() |
| Сравнение | isBefore() |
| Разница | diff() |
| Локализация | locale() |
| UTC | utc() |
| Клонирование | clone() |
| Timestamp | unix() |