Что такое Unix-время
Unix timestamp — число секунд от «эпохи Unix»: 1 января 1970 года, 00:00:00 UTC. Например, 1800000000 — это 15 января 2027 года, 08:00:00 UTC. Формат удобен тем, что его легко сравнивать и хранить, а часовой пояс применяется только при отображении.
Секунды или миллисекунды
- 10 цифр — секунды: Unix, PHP
time(), Pythontime.time(), PostgreSQLextract(epoch …). - 13 цифр — миллисекунды: JavaScript
Date.now(), JavaSystem.currentTimeMillis().
Частая ошибка — передать миллисекунды туда, где ждут секунды: дата уезжает на десятки тысяч лет вперёд.
Как перевести timestamp в дату в коде
| Язык | Секунды → дата |
|---|---|
| JavaScript | new Date(ts * 1000).toISOString() |
| Python | datetime.fromtimestamp(ts, tz=timezone.utc) |
| PHP | date('Y-m-d H:i:s', $ts) |
| PostgreSQL | to_timestamp(ts) |
| MySQL | FROM_UNIXTIME(ts) |
| Excel | =A1/86400+ДАТА(1970;1;1) |
Часовые пояса
Timestamp всегда в UTC. Чтобы показать местное время, к нему применяют смещение пояса: Москва — UTC+3, Баку — UTC+4, Алматы — UTC+5. Хранить в базе лучше именно timestamp или время с пометкой UTC, а переводить в местное — на стороне интерфейса.
Проблема 2038 года
Старые системы хранят время в 32-битном знаковом целом. Его максимум — 2 147 483 647, что соответствует 19 января 2038 года 03:14:07 UTC. Дальше счётчик переполняется. Решение — 64-битный тип, который уже используется в современных ОС и языках.
Частые вопросы
Что такое Unix timestamp?
Это количество секунд, прошедших с 00:00:00 1 января 1970 года по UTC. Часовой пояс в нём не хранится, поэтому одно и то же число означает один момент времени в любой точке мира.
Почему timestamp бывает из 10 и из 13 цифр?
10 цифр — секунды (так принято в Unix, PHP, Python, базах данных). 13 цифр — миллисекунды: их возвращает JavaScript Date.now() и многие API.
Как перевести timestamp в дату в Excel?
Для секунд: =A1/86400+ДАТА(1970;1;1) и формат ячейки «Дата и время». Результат будет в UTC — для Москвы прибавьте 3/24.
Что такое проблема 2038 года?
Если время хранится в знаковом 32-битном целом, максимум — 2 147 483 647 секунд, то есть 19 января 2038 года 03:14:07 UTC. После этого значение переполняется. Современные системы используют 64-битное время.