# General Translation Platform: formatRelativeTimeFromDate
URL: https://generaltranslation.com/ru/docs/platform/core/reference/utility-functions/formatting/format-relative-time-from-date.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Форматирует относительное время на основе даты без экземпляра GT. Справка по API для formatRelativeTimeFromDate.

[`formatRelativeTimeFromDate`](/docs/platform/core/reference/gt-class-methods/formatting/format-relative-time-from-date) — это автономная служебная функция из core library General Translation, которая форматирует строку относительного времени на основе `Date`, автоматически выбирая наиболее подходящую единицу времени (секунды, минуты, часы, дни, недели, месяцы или годы).

## Обзор [#overview]

Импортируйте `formatRelativeTimeFromDate` напрямую из `generaltranslation` и вызовите её, передав `Date` и объект параметров. Для этого не требуется API-ключ или экземпляр [GT](/docs/platform/core/reference/gt-class/constructor). Если нужно форматирование через экземпляр с наследованием его локали, используйте метод [`formatRelativeTimeFromDate`](/docs/platform/core/reference/gt-class-methods/formatting/format-relative-time-from-date) у экземпляра [`GT`](/docs/platform/core/reference/gt-class/constructor). Чтобы самостоятельно задать значение и единицу времени, используйте [`formatRelativeTime`](/docs/platform/core/reference/utility-functions/formatting/format-relative-time).

```typescript
import { formatRelativeTimeFromDate } from 'generaltranslation';

const pastDate = new Date(Date.now() - 7200000); // 2 часа назад
const formatted = formatRelativeTimeFromDate(pastDate, {
  locales: 'en-US',
  baseDate: new Date(),
});
// Возвращает: "2 hours ago"
```

Сигнатура:

```typescript
formatRelativeTimeFromDate(
  date: Date,
  options?: { locales?: string | string[] }
    & Omit<Intl.RelativeTimeFormatOptions, 'locales'>
    & { baseDate?: Date }
): string
```

## Как это работает [#how-it-works]

* **Выбор единицы времени.** Автоматически выбирает наиболее подходящую единицу времени на основе разницы между `date` и `baseDate`.
* **Используемый API.** Внутри использует [`Intl.RelativeTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat).
* **Числовой режим.** По умолчанию используются `numeric: 'auto'` и `style: 'long'`.
* **Базовая дата по умолчанию.** Если `baseDate` не указана, по умолчанию используется `new Date()`. Имейте в виду, что это может привести к несоответствиям при гидратации в приложениях с серверным рендерингом.
* **Определение локали.** Если `locales` не указан, используется локаль библиотеки по умолчанию — `en`.

## Параметры [#parameters]

| Параметр              | Описание                                                                       | Type                                                                                                       | Необязательный | По умолчанию |
| --------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- | -------------- | ------------ |
| [`date`](#date)       | Дата, которую нужно отформатировать относительно `baseDate`.                   | `Date`                                                                                                     | Нет            | —            |
| [`options`](#options) | Параметры форматирования, включая целевые локали и базовую дату для сравнения. | `{ locales?: string \| string[] } & Omit<Intl.RelativeTimeFormatOptions, 'locales'> & { baseDate?: Date }` | Да             | `{}`         |

### `date` [#date]

**Тип** `Date` · **Обязательно**

Объект `Date`, который нужно отформатировать относительно `baseDate`.

### `options` [#options]

**Тип** `{ locales?: string | string[] } & Omit<Intl.RelativeTimeFormatOptions, 'locales'> & { baseDate?: Date }` · **Необязательно** · **По умолчанию** `{}`

Параметры форматирования. В таблице перечислены `baseDate`, `locales` и распространённые параметры, предоставляемые опубликованными типами Ядра, с их действующими значениями по умолчанию в Ядре. (Дополнительные сведения о стандарте и особенностях среды выполнения см. в [параметрах конструктора `Intl.RelativeTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat#options)).

| Свойство        | Описание                                       | Тип                             | Необязательно | По умолчанию |
| --------------- | ---------------------------------------------- | ------------------------------- | ------------- | ------------ |
| `locales`       | Локали для форматирования.                     | `string \| string[]`            | Да            | `en`         |
| `baseDate`      | Базовая дата для сравнения.                    | `Date`                          | Да            | `new Date()` |
| `numeric`       | Всегда ли использовать числовой формат вывода. | `'always' \| 'auto'`            | Да            | `'auto'`     |
| `style`         | Длина итогового значения.                      | `'long' \| 'short' \| 'narrow'` | Да            | `'long'`     |
| `localeMatcher` | Используемый алгоритм подбора локали.          | `'best fit' \| 'lookup'`        | Да            | `'best fit'` |

`baseDate` — поле, доступное только в Ядре, и оно не передаётся в `Intl.RelativeTimeFormat`. Ядро также изменяет исходное значение по умолчанию для `numeric` с `'always'` на `'auto'`.

## Возвращает [#returns]

**Тип** `string`

Строка с отформатированным относительным временем (например, «2 часа назад», «через 3 дня»).

## Примеры [#examples]

```typescript
import { formatRelativeTimeFromDate } from 'generaltranslation';

const now = new Date();

// 2 часа назад
const pastDate = new Date(now.getTime() - 7200000);
console.log(formatRelativeTimeFromDate(pastDate, {
  locales: 'en-US',
  baseDate: now,
}));
// Вывод: "2 hours ago"

// 3 дня в будущем
const futureDate = new Date(now.getTime() + 259200000);
console.log(formatRelativeTimeFromDate(futureDate, {
  locales: 'en-US',
  baseDate: now,
}));
// Вывод: "in 3 days"
```

```typescript
// Несколько локалей
const pastDate = new Date(Date.now() - 86400000); // ~1 день назад
const now = new Date();

const locales = ['en-US', 'fr-FR', 'ja-JP', 'de-DE'];

locales.forEach((locale) => {
  console.log(`${locale}: ${formatRelativeTimeFromDate(pastDate, {
    locales: locale,
    baseDate: now,
  })}`);
});
// Вывод:
// en-US: yesterday
// fr-FR: hier
// ja-JP: 昨日
// de-DE: gestern
```

## Примечания [#notes]

* Автоматически выбирает наиболее подходящую единицу времени на основе разницы между `date` и `baseDate`.
* По умолчанию используются значения `numeric: 'auto'` и `style: 'long'`.
* Если `baseDate` не указана, по умолчанию используется `new Date()` — имейте в виду, что это может привести к ошибкам hydration в приложениях с серверным рендерингом.
* Внутри использует [`Intl.RelativeTimeFormat`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat).

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
