Секунды или миллисекунды
Самая частая ошибка при работе с датами — путаница между ними. Метки времени Unix считают секунды с 1970-01-01 UTC; Date.now() в JavaScript считает миллисекунды. Передайте метку Unix напрямую в конструктор Date, не умножив на 1000, и вы окажетесь в январе 1970 года. Правило простое: число из 10 цифр — это секунды, а из 13 цифр — миллисекунды, именно так здесь и работает автоопределение.
Стандарты и их различия
- ISO 8601 — базовый стандарт:
2024-01-15T10:30:00.000Z. Буква T отделяет дату от времени, а Z означает UTC.
- RFC 3339 — более строгий профиль ISO 8601 для интернет-протоколов. Требует явного смещения, поэтому пишет
+00:00 вместо Z.
- ISO 9075 — форма SQL-стандарта,
2024-01-15 10:30:00 — пробел вместо T и без часового пояса. Именно так выводят большинство баз данных.
- RFC 7231 — формат HTTP-даты в заголовках
Date, Expires и Last-Modified, всегда в GMT.
Два нестандартных формата
Mongo ObjectID занимает 12 байт, первые четыре из которых — время создания в секундах Unix, поэтому каждый ObjectID содержит в себе метку времени. Этот инструмент извлекает её при декодировании; при генерации он заполняет оставшиеся восемь байт нулями, а не выдумывает значения машины и счётчика.
Серийные даты Excel считают дни с 1899-12-30, а дробная часть обозначает время суток. Странная начальная точка существует, потому что Excel намеренно воспроизводит ошибку Lotus 1-2-3, которая считала 1900 високосным годом. Использование 1899-12-30 как нулевого дня выравнивает все даты начиная с марта 1900 года, поэтому конвертер и использует её.
Всё это — один миг
Что бы вы ни ввели, инструмент разбирает это в единый JavaScript-объект Date и заново отрисовывает этот один миг во всех одиннадцати форматах. Ничего никуда не отправляется — преобразование выполняется целиком в вашем браузере.