Moment.js предоставляет удобные средства для работы с датами и временем, включая форматирование относительных временных интервалов. Относительное время позволяет отображать даты в понятном виде: «5 минут назад», «через 2 дня», «месяц назад» и т.д. Для точного контроля над выводом таких значений используются пороги (thresholds), определяющие, когда и как изменяется единица времени.
Относительное время в Moment.js вычисляется по разнице между двумя моментами времени. По умолчанию библиотека использует стандартные пороги для перехода между единицами:
Эти пороги задаются в виде числовых значений, после которых происходит переключение на следующую единицу времени.
Moment.js предоставляет метод
moment.relativeTimeThreshold(unit, limit),
который позволяет изменять эти пороги:
unit — единица времени, для которой настраивается порог
('s', 'm', 'h', 'd',
'M').limit — числовое значение, определяющее порог, после
которого происходит переход к следующей единице времени.Примеры единиц времени:
| Единица | Обозначение |
|---|---|
| Секунда | 's' |
| Минута | 'm' |
| Час | 'h' |
| День | 'd' |
| Месяц | 'M' |
По умолчанию Moment.js считает, что до 45 секунд выводится «несколько секунд назад», а после — начинается подсчет минут. Для изменения порога используется:
moment.relativeTimeThreshold('s', 10); // теперь до 10 секунд будет отображаться 'несколько секунд'
После этой настройки, разница до 10 секунд будет выводиться как «несколько секунд», а начиная с 11 секунд — «1 минута назад».
По умолчанию порог перехода от минут к часам равен 45 минутам. Его можно изменить так:
moment.relativeTimeThreshold('m', 30); // переход к 'часам' произойдет после 30 минут
Теперь, если разница между моментами превышает 30 минут, она будет показываться в часах.
Для перехода между часами и днями, днями и месяцами, месяцами и
годами используются единицы 'h', 'd',
'M'. Пример полной настройки:
moment.relativeTimeThreshold('h', 12); // после 12 часов — показываем дни
moment.relativeTimeThreshold('d', 7); // после 7 дней — показываем недели/месяцы
moment.relativeTimeThreshold('M', 12); // после 12 месяцев — показываем годы
Настройка порогов позволяет создавать различные пользовательские сценарии:
Пример полной настройки для специфического интерфейса:
moment.relativeTimeThreshold('s', 5); // секунды
moment.relativeTimeThreshold('m', 20); // минуты
moment.relativeTimeThreshold('h', 8); // часы
moment.relativeTimeThreshold('d', 4); // дни
moment.relativeTimeThreshold('M', 6); // месяцы
С такой конфигурацией, разница в 3 минуты будет отображаться как «3 минуты назад», но уже через 20 минут переключится на «1 час назад», обеспечивая более компактное отображение временных интервалов.
Moment.js позволяет узнать текущие настройки порогов, вызывая метод без второго аргумента:
console.log(moment.relativeTimeThreshold('m')); // выведет текущий порог минут
Это удобно для отладки или динамической адаптации интерфейса в зависимости от локали или типа контента.
fromNow() или toNow().Пороги для относительного времени — это инструмент тонкой настройки отображения временных интервалов, позволяющий адаптировать библиотеку Moment.js под любые требования интерфейса. Они обеспечивают контроль над точностью и читабельностью временных данных, делая вывод интуитивным и соответствующим контексту использования.