date-fns date-fns
Функция fromUnixTime относится к базовому набору
преобразований временных меток и используется для конвертации Unix
timestamp (секунды с 1 января 1970 года UTC) в объект Date
языка JavaScript. В контексте библиотеки date-fns date-fns она
выполняет строго одно назначение — создание экземпляра даты из числового
значения секунд, что отличает её от стандартного конструктора
Date, ожидающего миллисекунды.
Unix-время представляет собой количество секунд, прошедших с начала
эпохи Unix: 1970-01-01T00:00:00Z. Это универсальный формат,
широко применяемый в API, базах данных, логах и серверных системах.
В JavaScript базовый объект Date работает с
миллисекундами:
new Date(1710000000) // интерпретируется как миллисекунды
Это создаёт проблему несовместимости форматов: Unix timestamp в секундах требует дополнительного преобразования перед использованием в стандартном API.
fromUnixTime устраняет необходимость ручного умножения
на 1000.
Сигнатура функции:
fromUnixTime(unixTime)
unixTime (number) — количество секунд с Unix-эпохиDate — объект даты JavaScriptimport { fromUnixTime } from 'date-fns'
const date = fromUnixTime(1710000000)
console.log(date)
// Date 2024-03-09T...
Функция выполняет эквивалент преобразования:
new Date(unixTime * 1000)
но делает это явно и семантически читаемо.
const unixTime = 1710000000
const date = new Date(unixTime * 1000)
import { fromUnixTime } from 'date-fns'
const date = fromUnixTime(1710000000)
Разница заключается не в функциональности, а в выразительности кода.
В крупных кодовых базах использование fromUnixTime снижает
вероятность ошибок, связанных с забытым умножением или неправильной
единицей измерения.
Функция строго ожидает секунды. Передача миллисекунд приведёт к некорректной дате:
fromUnixTime(1710000000000)
// интерпретируется как секунды → дата далеко в будущем
fromUnixTime возвращает объект Date,
который хранит момент времени в UTC-основанной внутренней форме, но
отображение зависит от локальной временной зоны окружения.
const date = fromUnixTime(1710000000)
console.log(date.toISOString())
ISO-строка всегда будет в UTC, тогда как toString()
зависит от локального часового пояса.
Возвращаемый объект Date является независимым:
const a = fromUnixTime(1710000000)
const b = fromUnixTime(1710000000)
console.log(a === b) // false
Многие серверы возвращают время в Unix формате:
{
"created_at": 1710000000
}
Обработка:
import { fromUnixTime } from 'date-fns'
function mapUser(data) {
return {
...data,
createdAt: fromUnixTime(data.created_at)
}
}
В системах, где хранится timestamp в секундах (например, Redis, PostgreSQL при кастомных схемах), функция используется для приведения к объекту Date.
При анализе логов Unix timestamp часто является стандартом:
const logEntry = {
event: 'login',
time: 1710000000
}
const readable = fromUnixTime(logEntry.time)
import { fromUnixTime, format } from 'date-fns'
const date = fromUnixTime(1710000000)
const formatted = format(date, 'yyyy-MM-dd HH:mm:ss')
import { fromUnixTime, isAfter } from 'date-fns'
const a = fromUnixTime(1710000000)
const b = fromUnixTime(1720000000)
console.log(isAfter(b, a)) // true
import { fromUnixTime, addDays } from 'date-fns'
const base = fromUnixTime(1710000000)
const future = addDays(base, 10)
Одна из самых распространённых ошибок:
fromUnixTime(Date.now())
Date.now() возвращает миллисекунды, поэтому результат
будет некорректным. Правильный вариант:
fromUnixTime(Math.floor(Date.now() / 1000))
Unix timestamp может быть отрицательным:
fromUnixTime(-1000)
Это приведёт к датам до 1970 года.
Если передать строку, произойдёт приведение типа:
fromUnixTime("1710000000")
Но поведение зависит от JavaScript coercion и может приводить к
NaN в сложных случаях, поэтому такие входные данные
считаются некорректными.
Внутри date-fns date-fns функция
fromUnixTime относится к категории низкоуровневых
конструкторов дат. Она:
Это делает её стабильным строительным блоком для более сложных операций.
В стандартной библиотеке JavaScript нет прямого аналога
fromUnixTime, поэтому эквивалент реализуется вручную:
const date = new Date(unixTime * 1000)
Однако использование fromUnixTime снижает когнитивную
нагрузку и делает код более декларативным, особенно в цепочках
преобразований данных.
Функция является тонкой обёрткой:
DateПоэтому она эквивалентна по производительности нативному
new Date(...), но выигрывает в читаемости и стандартизации
кода в рамках библиотеки date-fns date-fns