Автоматическое форматирование дат — основная возможность timeago.js. Библиотека самостоятельно вычисляет временной интервал между переданной датой и текущим моментом, подбирает подходящую единицу измерения и формирует строку на нужном языке. При этом вся логика вычислений скрыта внутри библиотеки.
Когда вызывается format(date), библиотека выполняет
следующие шаги:
Date.now().| Разница | Результат (en) | Результат (ru) |
|---|---|---|
| < 45 секунд | just now | только что |
| 45с – 89с | 1 minute ago | 1 минуту назад |
| 90с – 44 мин 30с | X minutes ago | X минут назад |
| 44м 30с – 89 мин | 1 hour ago | 1 час назад |
| 90м – 21ч 30м | X hours ago | X часов назад |
| 21ч 30м – 35ч 30м | 1 day ago | 1 день назад |
| 35ч 30м – 25.5 дней | X days ago | X дней назад |
| 25.5 – 45 дней | 1 month ago | 1 месяц назад |
| 45 – 319 дней | X months ago | X месяцев назад |
| 319 – 547 дней | 1 year ago | 1 год назад |
| > 547 дней | X years ago | X лет назад |
Нет необходимости вручную считать секунды, минуты или дни. Достаточно передать любое представление даты:
import { format } from 'timeago.js';
// 10 секунд назад
format(Date.now() - 10000);
// → "10 seconds ago"
// 5 минут назад
format(Date.now() - 300000);
// → "5 minutes ago"
// 3 часа назад
format(Date.now() - 10800000);
// → "3 hours ago"
// 2 дня назад
format(Date.now() - 172800000);
// → "2 days ago"
Функция format выполняет разовое форматирование. Для
автоматического обновления в реальном времени предназначена функция
render.
HTML:
<time class="post-date" datetime="2025-05-26T12:00:00Z"></time>
Jav * aScript:
import { render } from 'timeago.js';
const nodes = document.querySelectorAll('.post-date');
render(nodes, 'ru');
После вызова render:
datetime-атрибут каждого
элемента;Библиотека подстраивает частоту обновления под текущий временной интервал:
| Текущее отображение | Интервал обновления |
|---|---|
| Только что / секунды | ~10 секунд |
| Минуты | ~1 минута |
| Часы | ~1 час |
| Дни и более | ~1 день |
Это умная оптимизация: нет смысла обновлять “2 дня назад” каждые 10 секунд.
Библиотека автоматически определяет направление времени:
// Прошедшее
format(Date.now() - 60000, 'ru');
// → "1 минуту назад"
// Будущее
format(Date.now() + 60000, 'ru');
// → "через 1 минуту"
Это позволяет использовать одну и ту же функцию как для дат публикации, так и для дедлайнов.
Иногда требуется вычислить разницу не относительно текущего момента, а относительно другой даты:
import { format } from 'timeago.js';
const base = new Date('2025-06-01T00:00:00Z');
const target = new Date('2025-05-26T00:00:00Z');
format(target, 'ru', { relativeDate: base });
// → "5 дней назад"
В строках локали используется плейсхолдер %s, который
заменяется числом:
%s минут назад → 5 минут назад
через %s часов → через 3 часов
Локали с множественными формами дополнительно учитывают грамматику языка.
Автоматическое форматирование на русском языке учитывает правила согласования числительных:
1 минуту назад
2 минуты назад
5 минут назад
21 минуту назад
Эта логика реализована внутри функции русской локали, которая анализирует последнюю цифру числа.
Функция format чисто функциональна — она не изменяет DOM
и не создаёт таймеров. Это делает её удобной для:
const label = format(post.createdAt, 'ru');
// используется в шаблоне или передаётся в компонент
При желании можно автоматически выбирать локаль по языку браузера:
import { format } from 'timeago.js';
const locale = navigator.language.startsWith('ru') ? 'ru' : 'en_US';
format(new Date(), locale);
import { format } from 'timeago.js';
const posts = [
{ title: 'Первый пост', createdAt: '2025-05-26T08:00:00Z' },
{ title: 'Второй пост', createdAt: '2025-05-25T14:00:00Z' },
{ title: 'Третий пост', createdAt: '2025-05-20T10:00:00Z' },
];
posts.forEach(post => {
console.log(`${post.title}: ${format(post.createdAt, 'ru')}`);
});
Результат:
Первый пост: 4 часа назад
Второй пост: 22 часа назад
Третий пост: 6 дней назад