Unix-время представляет собой способ численного представления момента времени как количества секунд, прошедших с определённой фиксированной точки отсчёта — 00:00:00 UTC 1 января 1970 года. Эта точка называется Unix-эпохой (Unix epoch). Вся модель построена на линейной шкале времени, где каждое последующее значение увеличивается на единицу через равные интервалы.
Ключевая идея заключается в том, что время хранится не как сложная структура (дата, месяц, год, часы, минуты), а как одно целое число, упрощающее вычисления, сравнения и передачу данных между системами.
Unix-время определяется как:
Таким образом:
Unix-время всегда привязано к UTC (Coordinated Universal Time), что устраняет неоднозначность, связанную с часовыми поясами.
Важное следствие:
Это делает Unix-время удобным для распределённых систем, API и баз данных.
В JavaScript реализация времени отличается от классического Unix-подхода.
Объект Date и функции стандартной библиотеки
используют:
Функция:
Date.now()
возвращает количество миллисекунд с Unix-эпохи.
Пример:
1700000000000
Это означает:
| Формат | Единица | Пример |
|---|---|---|
| Unix timestamp | секунды | 1700000000 |
| JavaScript timestamp | миллисекунды | 1700000000000 |
Переход между форматами:
const seconds = Math.floor(Date.now() / 1000);
const milliseconds = seconds * 1000;
Unix-время возникло в рамках разработки операционной системы Unix в 1970-х годах.
Причины выбора модели:
Числовой формат оказался особенно удобным для системного программирования и логирования событий.
Во многих операционных системах Unix-подобного типа время хранится как целое число:
32-битное Unix-время ограничено диапазоном:
Это ограничение известно как проблема Year 2038 (Y2038 problem).
Причина:
Современные системы используют 64-битное представление, которое практически не имеет ограничений в обозримом будущем.
Unix-время может быть отрицательным:
Пример:
-86400 → 31 декабря 1969 года
Это возможно благодаря тому, что шкала времени симметрична относительно нуля.
Unix-время является промежуточным представлением, которое преобразуется в календарную дату.
В Jav * aScript:
const date = new Date(1700000000000);
Внутренне происходит:
Получение Unix-времени из даты:
const timestamp = new Date().getTime();
или
const timestamp = Date.now();
Для секундного формата:
const unixSeconds = Math.floor(Date.now() / 1000);
При переходе между форматами важно учитывать округление:
Math.floor — стандарт для Unix timestamp в
секундахMath.round может исказить момент времениНесмотря на простоту, Unix-время имеет ограничения:
В некоторых системах добавляются leap seconds, но Unix-время обычно их игнорирует, обеспечивая непрерывность шкалы.
Високосные секунды вводятся для корректировки вращения Земли относительно атомного времени.
Однако:
Это сделано ради:
Календарное время:
Unix-время:
Пример сравнения:
const a = 1700000000000;
const b = 1700000100000;
const isEarlier = a < b;
Unix-время активно используется для:
Пример вычисления разницы:
const start = Date.now();
// операция
for (let i = 0; i < 1e6; i++) {}
const end = Date.now();
const duration = end - start;
Результат выражается в миллисекундах.
Unix-время редко используется напрямую для отображения пользователю. Обычно оно преобразуется в формат даты.
В контексте библиотек работы с датами, таких как date-fns, Unix-время служит базовым входным или промежуточным типом данных, на основе которого выполняются операции форматирования, сравнения и арифметики.
64-битное Unix-время позволяет хранить:
Практический диапазон превышает возраст Вселенной в несколько раз при измерении в миллисекундах.
Unix-время зависит от системных часов устройства:
Поэтому в распределённых системах часто используется сервер как источник истины.
Во многих API Unix-время используется как стандарт:
Пример:
expires_at: 1700000000
или
created_at: 1700000000000
Одно из ключевых свойств:
const duration = endTimestamp - startTimestamp;
Это работает без дополнительных преобразований, поскольку шкала линейна.
Линейность Unix-времени обеспечивает:
Эта модель делает возможным эффективное управление временем в программных системах любого масштаба.