FormatJS предоставляет набор инструментов для интернационализации
приложений, где компонент FormattedRelativeTime
используется для отображения относительного времени в человекочитаемом
виде с учётом локали пользователя. В экосистеме React он реализован
через react-intl и опирается на нативный
Intl.RelativeTimeFormat.
FormattedRelativeTime предназначен для преобразования
числового значения и единицы времени в локализованное выражение
относительного времени:
Компонент автоматически адаптируется под язык и правила форматирования конкретной локали.
Основная задача — устранение ручного формирования строк и делегирование форматирования международному стандарту ICU.
Компонент принимает значение времени и единицу измерения, после чего формирует строку относительно текущего момента.
import { FormattedRelativeTime } from "react-intl";
function Example() {
return (
<FormattedRelativeTime
value={-5}
unit="minute"
/>
);
}
В данном примере отрицательное значение интерпретируется как прошедшее время.
Ключевой параметр — value, который задаёт величину
интервала.
Примеры:
<FormattedRelativeTime value={-1} unit="day" />
// "вчера" или "1 день назад" (в зависимости от локали)
<FormattedRelativeTime value={2} unit="hour" />
// "через 2 часа"
Важно учитывать, что точное текстовое представление зависит от локали
и настроек numeric.
unit определяет масштаб времени, который используется
для интерпретации value.
Поддерживаемые значения:
secondminutehourdayweekmonthquarteryearПример использования разных единиц:
<FormattedRelativeTime value={30} unit="second" />
<FormattedRelativeTime value={10} unit="minute" />
<FormattedRelativeTime value={3} unit="month" />
Выбор единицы влияет на грамматическую структуру результата и правила округления.
Параметр numeric управляет тем, будет ли вывод строго
числовым или допускается словесное выражение.
Принудительно использует числовую форму:
<FormattedRelativeTime
value={-1}
unit="day"
numeric="always"
/>
Результат: «1 день назад»
Позволяет использовать языковые формы вроде «вчера», «завтра», если локаль это поддерживает.
<FormattedRelativeTime
value={-1}
unit="day"
numeric="auto"
/>
Результат может быть: «вчера»
Параметр style определяет детализацию вывода:
long — полная форма («2 часа назад»)short — сокращённая («2 ч. назад»)narrow — максимально компактная форма («2ч»)Пример:
<FormattedRelativeTime value={-2} unit="hour" style="long" />
<FormattedRelativeTime value={-2} unit="hour" style="short" />
<FormattedRelativeTime value={-2} unit="hour" style="narrow" />
Выбор стиля зависит от плотности интерфейса.
Компонент не является статичным: он может автоматически пересчитывать отображаемое значение при изменении времени.
Внутренне используется таймер обновления, который зависит от величины интервала:
Это позволяет интерфейсу оставаться актуальным без ручного обновления состояния.
FormattedRelativeTime является React-обёрткой над:
Intl.RelativeTimeFormat
Пример низкоуровневого эквивалента:
const rtf = new Intl.RelativeTimeFormat("ru", {
numeric: "auto",
style: "long"
});
rtf.format(-1, "day");
// "вчера"
React-компонент автоматизирует:
Компонент работает корректно только внутри IntlProvider,
который задаёт локаль:
import { IntlProvider } from "react-intl";
<IntlProvider locale="ru">
<FormattedRelativeTime value={-10} unit="minute" />
</IntlProvider>
Без контекста локали поведение становится неопределённым или fallback-ориентированным.
FormattedRelativeTime не требует передачи идеально
нормализованных значений. В некоторых случаях библиотека выполняет
внутреннее округление.
Пример:
<FormattedRelativeTime value={90} unit="second" />
Может быть отображено как:
Это связано с тем, что ICU форматтер применяет правила округления и переходов между единицами.
Выбор unit обычно определяется уровнем детализации
данных:
Неправильный выбор единицы приводит к искажению смысла даже при
корректном value.
Разные языки по-разному выражают относительное время:
FormattedRelativeTime полностью делегирует эти правила
ICU-данным локали, исключая ручную обработку.
Несмотря на универсальность, существуют ограничения:
В таких случаях требуется предварительная нормализация данных до уровня поддерживаемых единиц времени.