Метод toJSDate() в библиотеке Luxon используется для
преобразования объекта DateTime в стандартный объект
JavaScript Date. Это ключевой мост между высокоуровневым
API Luxon и встроенной датой языка, который часто требуется при
взаимодействии с внешними библиотеками, DOM-API, сериализацией или
устаревшим кодом, ожидающим именно Date.
Основная задача метода — вернуть эквивалент момента времени,
представленного в DateTime, в виде нативного объекта
JavaScript без потери точности времени в миллисекундах.
dateTime.toJSDate()
Метод не принимает аргументов и возвращает экземпляр
Date.
Объект DateTime в Luxon хранит момент времени в UTC и
сопровождает его информацией о временной зоне и локализации. При вызове
toJSDate() происходит преобразование внутреннего
представления в Date, который также хранит время как
количество миллисекунд с Unix-эпохи.
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23, 12, 30);
const jsDate = dt.toJSDate();
console.log(jsDate);
Результатом будет стандартный объект Date,
соответствующий тому же моменту времени.
Luxon хранит время в виде Unix timestamp в миллисекундах. При вызове
toJSDate() выполняется простая упаковка этого значения:
Date через
new Date(milliseconds)Таким образом, метод не выполняет повторного вычисления временной зоны — он использует уже нормализованное значение.
Объект Date в JavaScript не хранит информацию о
временной зоне. Он оперирует абсолютным моментом времени.
Luxon же различает:
DateTime.local)DateTime.utc)DateTime.setZone)После вызова toJSDate() вся эта информация теряется,
остаётся только момент времени.
import { DateTime } from "luxon";
const dt = DateTime.fromISO("2026-05-23T10:00:00", { zone: "Europe/London" });
const jsDate = dt.toJSDate();
jsDate будет тем же абсолютным моментом, но без указания
зоны London.
Метод toJSDate() часто используется вместе с другими
методами преобразования, но имеет принципиальное отличие:
toMillis() — возвращает число (timestamp)toISO() — возвращает строку ISOtoJSDate() — возвращает объект Dateconst dt = DateTime.now();
dt.toMillis(); // 1716451200000
dt.toISO(); // "2026-05-23T12:00:00.000+03:00"
dt.toJSDate(); // Date объект
Многие API JavaScript требуют именно Date:
setTimeout с датами планирования (через
вычисления)Intl-обертки в сторонних инструментахПример:
const dt = DateTime.local().plus({ days: 3 });
calendar.addEvent({
start: dt.toJSDate()
});
Во многих ORM и backend-инструментах JavaScript ожидается именно
Date как тип даты.
const record = {
createdAt: DateTime.now().toJSDate()
};
Это обеспечивает совместимость с:
DateTime.local().toJSDate()
Результат — момент времени, соответствующий локальной зоне окружения выполнения.
DateTime.utc().toJSDate()
Результат — тот же момент, но уже интерпретируемый Date
как абсолютное время.
DateTime.fromISO("2026-05-23T10:00:00Z").toJSDate()
Строка с Z фиксирует UTC, и Date будет
эквивалентен этому моменту.
const a = DateTime.now().toJSDate();
const b = new Date();
Хотя оба варианта дают Date, различие заключается в
источнике данных:
toJSDate() — результат вычислений Luxonnew Date() — текущее время системных часовDateTime в Luxon является неизменяемым объектом. Метод
toJSDate() не модифицирует исходный объект:
const dt = DateTime.local(2026, 1, 1);
const jsDate = dt.toJSDate();
console.log(dt.toISO()); // исходное значение сохраняется
Это позволяет безопасно использовать метод в цепочках преобразований.
После преобразования невозможно восстановить:
UI-компоненты, ожидающие локальное время, могут интерпретировать
Date иначе, чем Luxon до преобразования.
Частая ошибка — повторное преобразование:
new Date(dt.toJSDate()).getTime();
Это избыточно, так как toJSDate() уже возвращает
Date.
Метод полезен, когда требуется перейти от абстрактной модели времени Luxon к низкоуровневым операциям:
const deadline = DateTime.local().plus({ hours: 5 });
const diff = deadline.toJSDate().getTime() - Date.now();
toJSDate() выполняет строго ограниченную задачу —
обеспечивает совместимость Luxon с экосистемой JavaScript, где
Date остаётся базовым типом времени. Он не предназначен для
форматирования, анализа или работы с зонами, а служит точкой выхода из
модели Luxon в стандартное представление языка.