Moment.js предоставляет мощные возможности для
работы с датами и временем, включая удобное отображение относительных
значений, таких как «2 минуты назад» или «через 3 дня». Для реализации
таких функций используется метод fromNow() и настройка
локалей с поддержкой кастомных форматов.
fromNow() для вычисления относительного времениМетод fromNow() возвращает строку, представляющую
разницу между текущей датой и моментом времени объекта Moment:
const moment = require('moment');
const futureDate = moment().add(5, 'days');
console.log(futureDate.fromNow()); // "через 5 дней"
const pastDate = moment().subtract(2, 'hours');
console.log(pastDate.fromNow()); // "2 часа назад"
Ключевые моменты:
Moment.js поддерживает множество языков, включая русскую локаль. Для корректного отображения относительных интервалов необходимо подключить соответствующую локаль:
moment.locale('ru');
const date = moment().subtract(1, 'day');
console.log(date.fromNow()); // "вчера"
Локаль отвечает за правильное склонение числительных и падежей в строках вроде «1 день назад», «2 дня назад», «5 дней назад».
Особенности русской локали:
Moment.js позволяет переопределять шаблоны для отображения
относительного времени через объект relativeTime:
moment.updateLocale('ru', {
relativeTime: {
future: "через %s",
past: "%s назад",
s: "несколько секунд",
m: "минуту",
mm: "%d минут",
h: "час",
hh: "%d часов",
d: "день",
dd: "%d дней",
M: "месяц",
MM: "%d месяцев",
y: "год",
yy: "%d лет"
}
});
После такой настройки метод fromNow() будет использовать
новые шаблоны:
const date = moment().add(3, 'hours');
console.log(date.fromNow()); // "через 3 часов"
Пояснения по шаблонам:
%s и %d используются для вставки числового
значения времени.future), так и
прошедшего (past) времени.s, m, mm,
h, hh, d, dd,
M, MM, y, yy)
отвечает за определённый интервал времени.from() для сравнения с произвольной датойМетод from() позволяет вычислять относительное время не
только относительно текущего момента, но и относительно любой другой
даты:
const date1 = moment('2026-06-01');
const date2 = moment('2026-06-10');
console.log(date1.from(date2)); // "9 дней назад"
console.log(date2.from(date1)); // "через 9 дней"
Особенности метода from():
updateLocale.Можно создавать свои единицы времени или изменять существующие через
relativeTimeThreshold:
moment.relativeTimeThreshold('s', 45); // секунд до минуты
moment.relativeTimeThreshold('m', 45); // минут до часа
moment.relativeTimeThreshold('h', 22); // часов до дня
moment.relativeTimeThreshold('d', 26); // дней до месяца
moment.relativeTimeThreshold('M', 11); // месяцев до года
Эти пороги позволяют гибко управлять тем, когда Moment.js переключается на следующую единицу времени:
const date = moment().subtract(30, 'seconds');
console.log(date.fromNow()); // "несколько секунд"
Изменение порогов позволяет, например, показывать «1 минута назад» раньше или позже, чем по умолчанию.
calendar()Для некоторых интерфейсов удобнее использовать метод
calendar(), который показывает относительное время с
дополнительным контекстом:
const yesterday = moment().subtract(1, 'day');
console.log(yesterday.calendar()); // "Вчера в 14:23"
const tomorrow = moment().add(1, 'day');
console.log(tomorrow.calendar()); // "Завтра в 14:23"
Особенности:
updateLocale для всех
случаев календаря.fromNow() — отображение относительного времени от
текущего момента.from() — отображение относительного времени от
произвольной даты.updateLocale обеспечивают корректное склонение
и кастомизацию шаблонов.relativeTimeThreshold позволяет управлять порогами
смены единиц времени.calendar() дополняет функционал для более естественного
отображения дат в интерфейсах.Эти возможности делают Moment.js универсальным инструментом для работы с датами в формате человеческого восприятия, позволяя создавать локализованные и гибко настраиваемые интерфейсы.