Unix-временные метки: четыре ловушки, ломающие ваши даты
Unix-метка — просто счётчик секунд с 1970-01-01 UTC. Просто — и всё же метки порождают больше багов с датами, чем любой другой формат. Четыре ловушки объясняют почти всё.
1. Секунды vs миллисекунды
Date.now() в JavaScript возвращает миллисекунды; классический Unix-время и большинство серверных логов — секунды. 10 цифр — секунды, 13 — миллисекунды. Смешение превращает 2026 год в дату 53 000-го года — или 1970-го.
2. UTC против локального
У метки нет часового пояса — это один и тот же момент повсюду. Баги появляются, когда код конвертирует по зоне сервера вместо зоны пользователя, или когда строка вроде 2026-09-01 08:00 парсится без указания зоны.
3. Скачки летнего времени
Зоны с летним временем дважды в год сдвигаются на час. Встреча, сохранённая как 09:00 локального летом и зимой, — это два разных момента UTC; храните UTC и конвертируйте только при показе — весь класс таких багов исчезает.
4. Парсинг по локали
03/04/2026 в одной стране — 4 марта, в другой — 3 апреля. Разбор дат из текста требует явного формата — никогда не угадывайте.
Рабочие правила: хранить UTC, конвертировать только при показе, всегда указывать формат. Проверить метку или строку: конвертер меток или мировые часы рядом — оба работают в браузере.