Метод fromNow

Метод fromNow библиотеки Moment.js используется для вычисления и отображения относительного времени относительно текущего момента. Он позволяет легко преобразовать дату в удобочитаемый формат вроде «5 минут назад», «через 3 дня», «2 месяца назад» и так далее. Этот метод особенно полезен для интерфейсов, где требуется показать пользователю временные интервалы в человекопонятном виде.


Синтаксис

moment([date]).fromNow([withoutSuffix]);

Параметры:

  • date (необязательный) – дата, с которой будет произведён расчёт. Если параметр не указан, берётся текущий момент (moment()).

  • withoutSuffix (необязательный) – логическое значение (true или false).

    • false (по умолчанию) добавляет суффиксы «назад» или «через».
    • true возвращает только относительное время без суффиксов.

Возвращаемое значение: строка с относительным временем.


Примеры использования

  1. Отображение прошедшего времени
const pastDate = moment().subtract(10, 'minutes');
console.log(pastDate.fromNow()); // "10 минут назад"
  1. Отображение будущего времени
const futureDate = moment().add(3, 'days');
console.log(futureDate.fromNow()); // "через 3 дня"
  1. Без суффикса
const pastDate = moment().subtract(2, 'hours');
console.log(pastDate.fromNow(true)); // "2 часа"
  1. Сравнение с конкретной датой
const eventDate = moment("2026-06-01");
console.log(eventDate.fromNow()); // "через X дней"

Локализация

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

moment.locale('ru');
const date = moment().subtract(5, 'minutes');
console.log(date.fromNow()); // "5 минут назад"

Особенности русской локализации:

  • Склонение единиц времени: «минуту», «минуты», «минут».
  • Суффиксы «назад» и «через» автоматически добавляются.

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

Метод fromNow автоматически подбирает единицы времени:

  • Секунды – до 45 секунд: «несколько секунд назад».
  • Минуты – от 45 секунд до 45 минут: «X минут назад».
  • Часы – от 45 минут до 22 часов: «X часов назад».
  • Дни – от 22 часов до 25 дней: «X дней назад».
  • Месяцы – от 25 до 345 дней: «X месяцев назад».
  • Годы – более 345 дней: «X лет назад».

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


Взаимодействие с другими методами Moment.js

fromNow часто комбинируется с методами add, subtract, startOf и endOf:

// Через 2 недели от начала месяца
const startMonth = moment().startOf('month').add(2, 'weeks');
console.log(startMonth.fromNow()); // "через X дней"

// Прошлое начало года
const startYear = moment().startOf('year');
console.log(startYear.fromNow()); // "X месяцев назад"

Настройка порогов времени

Moment.js позволяет изменять стандартные пороги для относительного времени через updateLocale. Например, можно сократить период «несколько секунд»:

moment.updateLocale('ru', {
    relativeTime: {
        s: 'секунда',
        ss: '%d секунд',
        m: 'минута',
        mm: '%d минут',
        h: 'час',
        hh: '%d часов',
        d: 'день',
        dd: '%d дней',
        M: 'месяц',
        MM: '%d месяцев',
        y: 'год',
        yy: '%d лет'
    }
});

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

  • Для динамических интерфейсов, таких как ленты новостей, рекомендуется периодически обновлять отображение fromNow, чтобы время оставалось актуальным.
  • Если требуется только абсолютное значение без «назад» или «через», использовать параметр withoutSuffix.
  • Локализацию лучше устанавливать глобально через moment.locale('ru'), чтобы избежать неоднородного отображения.

Метод fromNow в Moment.js обеспечивает мощный и удобный инструмент для работы с относительным временем, позволяя разработчикам создавать человекопонятные интерфейсы без сложных вычислений и условий.