tomai
Войти

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, конвертировать только при показе, всегда указывать формат. Проверить метку или строку: конвертер меток или мировые часы рядом — оба работают в браузере.