Timestamp — числовое представление момента времени в виде количества
миллисекунд, прошедших с 1 января 1970 года (эпоха Unix). Это один из
трёх поддерживаемых типов входных данных функции format,
наряду с объектами Date и строками.
import { format } from 'timeago.js';
const ts = 1716720000000; // конкретная метка времени
format(ts, 'ru');
// → "5 дней назад" (зависит от текущей даты)
Библиотека принимает timestamp в миллисекундах. Значение передаётся
напрямую, без оборачивания в new Date().
const now = Date.now(); // миллисекунды
format(now); // → "just now"
Date.now() — наиболее производительный способ получить
текущий timestamp. Он не создаёт объект Date и работает
быстрее, чем new Date().getTime().
const oneMinute Ago = Date.now() - 1000 * 60;
const oneHour Ago = Date.now() - 1000 * 60 * 60;
const oneDay Ago = Date.now() - 1000 * 60 * 60 * 24;
const oneWeek Ago = Date.now() - 1000 * 60 * 60 * 24 * 7;
format(oneMinuteAgo, 'ru'); // → "1 минуту назад"
format(oneHourAgo, 'ru'); // → "1 час назад"
format(oneDayAgo, 'ru'); // → "1 день назад"
format(oneWeekAgo, 'ru'); // → "1 неделю назад"
const SECOND = 1000;
const MINUTE = SECOND * 60;
const HOUR = MINUTE * 60;
const DAY = HOUR * 24;
format(Date.now() - 3 * HOUR, 'ru'); // → "3 часа назад"
format(Date.now() - 10 * DAY, 'ru'); // → "10 дней назад"
Серверные API часто возвращают Unix timestamp в секундах, а не миллисекундах:
{
"created_at": 1716720000
}
Для timeago.js необходимо умножить на 1000:
const serverTimestamp = 1716720000;
format(serverTimestamp * 1000, 'ru');
Если не умножить, разница будет вычислена неверно — дата окажется в начале 1970-х.
const date = new Date('2025-05-26T10:00:00Z');
const ts = date.getTime(); // или +date
format(ts, 'ru');
+date — краткий способ получить timestamp через унарный
плюс.
const createdAt = 1716720000000;
const diff = Date.now() - createdAt;
console.log(diff); // разница в миллисекундах
format(createdAt, 'ru'); // форматирует автоматически
Вычислять разницу вручную не нужно — format делает это
внутри.
Отрицательные значения означают даты до 1 января 1970 года:
format(-1000 * 60 * 60 * 24 * 365);
// → "54 years ago" (зависит от текущего года)
const inOneHour = Date.now() + 1000 * 60 * 60;
format(inOneHour, 'ru');
// → "через 1 час"
Библиотека автоматически определяет направление — прошлое или будущее.
При сохранении дат в хранилище браузера:
// Сохранение
localStorage.setItem('lastVisit', Date.now().toString());
// Чтение и форматирование
const ts = parseInt(localStorage.getItem('lastVisit'), 10);
format(ts, 'ru');
const response = await fetch('/api/posts');
const data = await response.json();
data.posts.forEach(post => {
console.log(format(post.createdAtMs, 'ru'));
});
Если сервер возвращает миллисекунды — передаётся напрямую. Если секунды — умножается на 1000.
При форматировании большого списка записей timestamp эффективнее
объекта Date:
// Менее эффективно
posts.map(p => format(new Date(p.timestamp), 'ru'));
// Более эффективно — если timestamp уже в мс
posts.map(p => format(p.timestamp, 'ru'));
Разница незначительна для небольших объёмов, но важна при тысячах элементов.
Функция render() использует атрибут
datetime, который задаётся строкой, а не числом. При работе
с render нужно конвертировать timestamp в ISO-строку:
const ts = 1716720000000;
const isoStr = new Date(ts).toISOString();
element.setAttribute('datetime', isoStr);
render(element, 'ru');
JavaScript timestamp имеет точность до миллисекунды. Для отображения относительного времени этого более чем достаточно. Для sub-millisecond точности (performance timing) timeago.js не предназначен.
| Источник | Тип | Конвертация |
|---|---|---|
JavaScript Date.now() |
мс | Нет |
Python time.time() |
сек | * 1000 |
PHP time() |
сек | * 1000 |
MySQL UNIX_TIMESTAMP() |
сек | * 1000 |
PostgreSQL EXTRACT(EPOCH FROM ...) |
сек | * 1000 |
Java System.currentTimeMillis() |
мс | Нет |
Go time.Unix() |
сек | * 1000 |