Функция getUnixTime из библиотеки date-fns
предназначена для получения Unix-времени в секундах на основе объекта
Date. Unix-время представляет собой количество секунд,
прошедших с 1 января 1970 года 00:00:00 UTC, что делает его
универсальным форматом для хранения и передачи временных меток в
системах различного уровня.
Unix-время оперирует абсолютной точкой отсчёта, не зависящей от часовых поясов, летнего времени и локальных настроек системы. Это обеспечивает предсказуемость при работе с датами в распределённых системах.
В JavaScript стандартный объект Date хранит время в
миллисекундах, прошедших с той же эпохи. Это создаёт необходимость
преобразования между форматами:
Date → миллисекундыФункция getUnixTime выполняет это преобразование,
приводя значение к секундам.
getUnixTime(date)
Параметры:
date — экземпляр Date или значение,
которое может быть преобразовано в датуВозвращаемое значение:
Основная операция функции заключается в делении внутреннего значения даты в миллисекундах на 1000 с последующим округлением вниз.
Эквивалентное поведение можно представить следующим образом:
Math.floor(date.getTime() / 1000)
Однако использование getUnixTime предпочтительнее, так
как функция уже оптимизирована и учитывает особенности реализации
date-fns.
import { getUnixTime } from 'date-fns';
const date = new Date('2026-01-01T00:00:00Z');
const unixTime = getUnixTime(date);
console.log(unixTime);
Результат будет числом, например:
1767225600
Метод Date.now() возвращает текущее время в
миллисекундах:
Date.now(); // 1716360000000
getUnixTime возвращает значение в секундах:
getUnixTime(new Date()); // 1716360000
Ключевые различия:
Date.now() — миллисекундыgetUnixTime() — секундыЭто делает getUnixTime более удобным для API, баз данных
и систем логирования, где миллисекундная точность часто избыточна.
Unix-время не зависит от временной зоны. Любая локальная дата при преобразовании в Unix timestamp нормализуется к UTC.
const localDate = new Date('2026-01-01 12:00:00');
const unix = getUnixTime(localDate);
Несмотря на локальный ввод, результат будет одинаковым для всех систем, находящихся в разных часовых поясах.
Во многих API Unix timestamp используется как стандарт передачи времени:
const payload = {
createdAt: getUnixTime(new Date()),
};
Причины популярности:
Unix-время удобно использовать для сравнений:
const a = getUnixTime(new Date('2026-01-01'));
const b = getUnixTime(new Date('2026-01-02'));
console.log(a < b); // true
Сравнение чисел быстрее и надёжнее, чем сравнение объектов
Date.
Так как Unix time измеряется в секундах, дробная часть миллисекунд отбрасывается:
const date = new Date('2026-01-01T00:00:00.999Z');
getUnixTime(date); // 1767225600
Миллисекунды игнорируются, поскольку происходит усечение вниз.
Если передать недопустимую дату:
getUnixTime(new Date('invalid'));
результатом будет NaN, поскольку внутреннее значение
времени становится невалидным.
Проверка корректности может выполняться через:
const date = new Date('invalid');
if (!isNaN(date)) {
const unix = getUnixTime(date);
}
Функция принимает не только Date, но и значения, которые
могут быть преобразованы в дату:
getUnixTime('2026-01-01T00:00:00Z');
Однако при прямом использовании строк важно учитывать, что поведение
зависит от парсинга Date.
Для преобразования Unix timestamp обратно в Date
используется связанная функция:
import { fromUnixTime } from 'date-fns';
const date = fromUnixTime(1767225600);
Связка getUnixTime ↔︎ fromUnixTime формирует
симметричную пару преобразований:
Date → Unix time → Dateconst record = {
id: 1,
timestamp: getUnixTime(new Date()),
};
events.sort((a, b) => a.timestamp - b.timestamp);
const now = getUnixTime(new Date());
const expires = getUnixTime(expiryDate);
if (now > expires) {
// срок действия истёк
}
getUnixTime является лёгкой функцией без сложной логики.
Она выполняет одно преобразование и не требует дополнительных
вычислений.
По сути, её роль сводится к:
DateЭто делает её подходящей для массового использования в высоконагруженных системах.
Date.now(); // миллисекунды
getUnixTime(new Date()); // секунды
Смешивание этих значений приводит к ошибкам в логике времени.
Math.floor(getUnixTime(date) / 1000);
Такое преобразование некорректно, поскольку значение уже приведено к секундам.
Хотя Unix time независим от часового пояса, исходный
Date может быть неправильно интерпретирован при создании из
строки без указания зоны.
date-fns предоставляет функциональный подход к работе с
датами, где каждая операция представлена отдельной чистой функцией.
getUnixTime вписывается в эту модель как утилита
преобразования, не изменяющая исходный объект.
В отличие от объектно-ориентированных подходов, здесь отсутствует состояние:
DateКаждая операция прозрачна и предсказуема.
getUnixTime часто используется совместно с:
format — для отображения датыaddDays, subDays — для вычисленийcompareAsc — для сортировкиfromUnixTime — для обратного преобразованияТак формируется цепочка операций над датами, где Unix time выступает как промежуточный универсальный формат.