Что такое Unix-таймстамп?
Unix-таймстамп (его также называют epoch time или POSIX-время) — это количество секунд, прошедших с момента 00:00:00 UTC 1 января 1970 года, так называемой «эпохи Unix», без учёта високосных секунд. Именно так компьютеры хранят конкретный момент времени в виде одного числа, не привязанного к часовым поясам. Этот калькулятор переводит значение в миллисекундах в стандартный Unix-таймстамп в секундах, а заодно показывает, сколько минут, часов и дней прошло с начала эпохи.
Как пользоваться
Введите время в миллисекундах. Чтобы получить текущий Unix-таймстамп («epoch сейчас»), укажите нынешнее время в миллисекундах; в поле по умолчанию подставлено значение для примера. Калькулятор делит его на 1000 и округляет вниз, выдавая целое число секунд — именно такой формат ожидают практически все API, базы данных и языки программирования.
Разбор формулы
Основа преобразования — $$\text{Epoch} = \left\lfloor \dfrac{\text{Time (ms)}}{1000} \right\rfloor$$. Миллисекунды дают точность до тысячных долей секунды, но классический Unix-таймстамп измеряется в целых секундах, поэтому мы берём целую часть (floor), отбрасывая дробную. Дальше, разделив таймстамп на 60, 3600 и 86 400, получаем количество минут, часов и дней соответственно.
$$\left\{ \begin{aligned} \text{Minutes} &= \left\lfloor \tfrac{\text{Epoch}}{60} \right\rfloor \\ \text{Hours} &= \left\lfloor \tfrac{\text{Epoch}}{3600} \right\rfloor \\ \text{Days} &= \left\lfloor \tfrac{\text{Epoch}}{86400} \right\rfloor \end{aligned} \right.$$
Пример расчёта
Допустим, текущее время равно 1 700 000 000 000 миллисекунд. Делим на 1000 и получаем 1 700 000 000 секунд — это и есть Unix-таймстамп.
$$\left\lfloor \frac{1\,700\,000\,000\,000}{1000} \right\rfloor = 1\,700\,000\,000$$Разделив 1 700 000 000 на 86 400 и округлив вниз, получаем 19 675 дней с 1 января 1970 года, что соответствует середине ноября 2023 года.
$$\left\lfloor \frac{1\,700\,000\,000}{86\,400} \right\rfloor = 19\,675$$Частые вопросы
Почему секунды, а не миллисекунды? Изначальный стандарт Unix использует секунды. Метод JavaScript Date.now() возвращает миллисекунды, поэтому часто приходится делить результат на 1000.
Учитываются ли часовые пояса? Нет — Unix-время всегда привязано к UTC. Один и тот же момент имеет одинаковый таймстамп в любой точке Земли.
Что за «проблема 2038 года»? Системы, хранящие таймстамп в виде знакового 32-битного целого числа, переполнятся 19 января 2038 года. Современные 64-битные системы от этой проблемы избавлены.