Работаем с датами в JS

Работа с датами в Moment.js: форматирование, разницы, сравнение и русская локаль. Исторические результаты 2018 года и современный Intl.DateTimeFormat.

Moment.js находится в режиме сопровождения; для нового проекта сначала рассмотрите встроенные Date и Intl либо библиотеку под свои требования. Примеры ниже остаются полезными для существующего кода на Moment. Комментарии с датами и «лет назад» относятся к запуску 11 апреля 2018 года, а не к сегодняшнему дню. Для русских названий загрузите русскую локаль и задайте moment.locale(“ru”).

Для работы с датами в JS очень удобно использовать библиотеку Moment.js. Основные возможности использования этой библиотеки:

Текущее время/дата в разных форматах:

moment().format('MMMM Do YYYY, h:mm:ss a'); // апрель 11-го 2018, 1:03:34 дня
moment().format('dddd'); // среда
moment().format("MMM Do YY"); // апр. 11-го 18
moment().format('YYYY [escaped] YYYY'); // 2018 escaped 2018
moment().format(); // 2018-04-11T 13:03:54+03:00

Разница во времени от текущего:

moment("20111031", "YYYYMMDD").fromNow(); // 6 лет назад
moment("20120620", "YYYYMMDD").fromNow(); // 6 лет назад
moment().startOf('day').fromNow(); // 13 часов назад
moment().endOf('day').fromNow(); // через 11 часов
moment().startOf('hour').fromNow(); // 7 минут назад

Прибавление, вычитание дат:

moment().add(7, 'days'); // прибавляет к текущей дате 7 дней
moment().add(7, 'months'); // прибавляет текущей дате 7 месяцев
moment().add(7, 'years'); // прибавляет к текущей дате 7 лет
moment().subtract(7, 'days'); // вычитает из текущей даты 7 дней
moment().subtract(7, 'months'); // вычитает 7 месяцев из текущей даты
moment().subtract(7, 'years'); // вычитает 7 лет из текущей даты

Сколько времени прошло между двумя произвольными датами:

var dateB = moment('2017-12-12');
var dateC = moment('2017-12-11');
console.log(dateB.from(dateC));

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

var dateB = moment('2014-11-11');
var dateC = moment('2014-10-11');
console.log('Разница в ', dateB.diff(dateC), 'миллисекунд');
console.log('Разница в ', dateB.diff(dateC, 'days'), 'дней');
console.log('Разница в ', dateB.diff(dateC, 'months'), 'месяцев');

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

console.log(moment('2010-09-20').isAfter('2010-10-19')); // возвращает false
console.log(moment('2010-11-20').isAfter('2010-10-19')); // возвращает true

Поддержка других языков:

moment.locale('ru'); // устанавливает русскую локаль
moment().format('LT'); // 13:15
moment().format('LTS'); // 13:15:44
moment().format('L'); // 11.04.2018
moment().format('l'); // 11.4.2018
moment().format('LL'); // 11 апреля 2018 г.
moment().format('ll'); // 11 апр. 2018 г.
moment().format('LLL'); // 11 апреля 2018 г., 13:15
moment().format('lll'); // 11 апр. 2018 г., 13:15
moment().format('LLLL'); // среда, 11 апреля 2018 г., 13:15
moment().format('llll'); // ср, 11 апр. 2018 г., 13:15

Для вывода даты без Moment:

const date = new Date('2018-04-11T13:15:00+03:00');
const formatter = new Intl.DateTimeFormat('ru-RU', {
  dateStyle: 'long', timeStyle: 'short', timeZone: 'Europe/Moscow'
});
console.log(formatter.format(date));

Явный timeZone делает вывод предсказуемым между компьютерами. Разность timestamp — прошедшие миллисекунды; календарные дни и месяцы требуют отдельного правила, особенно при смене часового пояса.

Проверенные источники

momentjs.com, developer.mozilla.org. Проверено 10 октября 2026 года.

Все материалы раздела «Программирование»Каталог инструментов