Функция format — основной публичный метод библиотеки.
Она преобразует дату в читаемую строку относительного времени. Это
синхронная, чистая функция без побочных эффектов.
format(
date: Date | string | number,
locale?: string,
opts?: { relativeDate?: Date | number }
): string
date — обязательный аргумент, входная
дата. Поддерживаемые типы:
Date — JavaScript-объект датыnumber — timestamp в миллисекундахstring — строка даты, совместимая с
new Date()locale — необязательная
строка-идентификатор локали. Если не указана, используется
'en_US'.
opts — необязательный объект с
настройками: * relativeDate — опорная дата вместо
Date.now()
Строка в формате выбранной локали:
format(Date.now() - 60000); // → "1 minute ago"
format(Date.now() - 60000, 'ru'); // → "1 минуту назад"
С объектом Date:
import { format } from 'timeago.js';
const date = new Date('2025-05-26T10:00:00Z');
format(date, 'ru');
// → "4 часа назад"
С timestamp:
format(1716720000000, 'ru');
С ISO-строкой:
format('2025-05-26T10:00:00Z', 'ru');
С опорной датой:
const base = new Date('2025-06-01T00:00:00Z');
format('2025-05-26T00:00:00Z', 'ru', { relativeDate: base });
// → "6 дней назад"
При вызове format(input, locale, opts):
new Date(input).getTime().relativeDate.getTime() - inputTimestamp (или
Date.now() - inputTimestamp).number — количество единиц (делением на
divisor).localeFunc(number, index).[0]
для прошлого, [1] для будущего).%s заменяется на number.format(Date.now() - 3600000);
// → "1 hour ago"
По умолчанию используется встроенная en_US.
const date = '2025-05-26T08:00:00Z';
const labels = {
ru: format(date, 'ru'),
en: format(date, 'en_US'),
de: format(date, 'de'),
};
Функция не сохраняет состояния между вызовами.
const posts = [
{ id: 1, createdAt: '2025-05-26T10:00:00Z' },
{ id: 2, createdAt: '2025-05-25T08:00:00Z' },
];
const enriched = posts.map(p => ({
...p,
timeLabel: format(p.createdAt, 'ru'),
}));
const message = `Пост опубликован ${format(post.createdAt, 'ru')}`;
format не изменяет никаких внешних структур:
Это делает format безопасной для серверного рендеринга,
тестирования и мемоизации.
При частых вызовах с одинаковыми аргументами:
import { format } from 'timeago.js';
const cache = new Map();
function memoFormat(date, locale = 'ru') {
const key = `${new Date(date).getTime()}-${locale}`;
const now = Date.now();
if (cache.has(key)) {
const { result, timestamp } = cache.get(key);
if (now - timestamp < 30000) return result; // кэш 30 секунд
}
const result = format(date, locale);
cache.set(key, { result, timestamp: now });
return result;
}
import { format } from 'timeago.js';
const result: string = format(new Date(), 'ru');
Функция всегда возвращает string. Входной тип —
Date | string | number.
| Ввод | Поведение |
|---|---|
null |
Ошибка или “NaN years ago” |
undefined |
Ошибка |
"invalid" |
Некорректная строка из локали |
NaN |
Некорректный результат |
new Date(0) |
Корректно, далёкое прошлое |
-Infinity |
Некорректный результат |
Рекомендуется валидировать входные данные перед передачей в
format.