Метод from

Метод from является частью библиотеки Moment.js и предназначен для генерации человеко-читаемых строк, описывающих временные промежутки относительно другого момента времени. Он используется для того, чтобы выразить разницу между двумя датами в формате «X минут назад», «через Y дней» и подобных.

Синтаксис метода

moment().from(Moment|Date|String|Number, Boolean);

Параметры:

  • Moment|Date|String|Number – момент времени, относительно которого будет вычисляться разница. Если параметр не указан, используется текущее время (moment()).
  • Boolean – необязательный параметр withoutSuffix. При значении true метод возвращает строку без суффикса «назад» или «через». По умолчанию false.

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

let now = moment();
let past = moment().subtract(3, 'days');

console.log(past.from(now));           // "3 дня назад"
console.log(past.from(now, true));     // "3 дня"

В этом примере создаётся объект past, представляющий момент времени три дня назад. Метод from возвращает строку с учётом суффикса, если второй параметр не указан.

Вычисление будущих интервалов

Метод from корректно работает и для дат в будущем:

let future = moment().add(5, 'hours');

console.log(future.from());            // "через 5 часов"
console.log(future.from(moment(), true)); // "5 часов"

При сравнении с текущим временем результат отражает будущее событие с соответствующим префиксом.

Сравнение с конкретной датой

Метод from позволяет сравнивать два произвольных момента времени:

let eventStart = moment('2026-06-01');
let eventEnd = moment('2026-06-10');

console.log(eventEnd.from(eventStart));       // "через 9 дней"
console.log(eventStart.from(eventEnd));       // "9 дней назад"

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

Использование с разными единицами времени

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

console.log(moment().subtract(45, 'seconds').from()); // "несколько секунд назад"
console.log(moment().subtract(90, 'seconds').from()); // "минуту назад"
console.log(moment().subtract(5, 'days').from());     // "5 дней назад"
console.log(moment().add(2, 'months').from());        // "через 2 месяца"

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

Метод from автоматически использует текущую локаль Moment.js. Для изменения языка выводимых строк используется метод locale:

moment.locale('ru');
console.log(moment().subtract(3, 'days').fromNow()); // "3 дня назад"

moment.locale('en');
console.log(moment().subtract(3, 'days').fromNow()); // "3 days ago"

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

Отличие метода fromNow

Метод fromNow является сокращённой версией from с текущим временем в качестве базового:

console.log(moment().subtract(2, 'hours').fromNow()); // "2 часа назад"
console.log(moment().add(10, 'minutes').fromNow());   // "через 10 минут"

Внутри fromNow вызывается from(moment()), что делает синтаксис более компактным для вычислений относительно текущего момента.

Важные особенности

  • Метод from не изменяет оригинальный объект Moment, а возвращает новую строку.
  • Метод учитывает календарные особенности, например, разные дни в месяцах, високосные годы.
  • Для интервалов меньше одной минуты возвращается строка «несколько секунд», а не точное число секунд.
  • withoutSuffix = true используется для создания строк без «назад» или «через», полезно для статических интерфейсов.

Практическое применение

Метод from активно используется в интерфейсах для отображения относительного времени, например:

  • Сообщения в чатах: «сообщение отправлено 5 минут назад».
  • Новости и уведомления: «событие начнётся через 2 дня».
  • Логи и отчёты: «последнее обновление — 3 часа назад».

Комбинирование с другими методами Moment.js

Метод from часто комбинируется с add, subtract, startOf, endOf для более точного управления датами:

let startOfWeek = moment().startOf('week');
let twoDaysLater = startOfWeek.add(2, 'days');

console.log(twoDaysLater.from(startOfWeek)); // "через 2 дня"

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