Библиотека Luxon предназначена для работы с датой, временем, часовыми
поясами, локалями и форматированием в приложениях на JavaScript. Она
была создана как современная альтернатива устаревающим подходам работы с
объектом Date и предоставляет более удобный, предсказуемый
и читаемый API.
Luxon построен поверх стандарта Intl, встроенного в
современные браузеры и среду Node.js, благодаря чему поддерживает
локализацию и работу с часовыми поясами без подключения громоздких
зависимостей.
Основные сущности библиотеки:
DateTime — работа с датой и временем;Duration — интервалы времени;Interval — временные диапазоны;Наиболее распространённый способ подключения Luxon в современных
проектах — установка через пакетный менеджер npm.
npm install luxon
После установки библиотека появляется в каталоге
node_modules и может импортироваться в любой модуль
проекта.
Файл package.json после установки содержит
зависимость:
{
"dependencies": {
"luxon": "^3.0.0"
}
}
При использовании менеджера пакетов yarn применяется
аналогичная команда:
yarn add luxon
Для проектов, использующих pnpm, установка выполняется
следующим образом:
pnpm add luxon
Современный JavaScript использует синтаксис ES-модулей
(import/export). Luxon полностью поддерживает такой
формат.
import { DateTime } from 'luxon';
import { DateTime } from 'luxon';
const now = DateTime.now();
console.log(now.toString());
import { DateTime, Duration, Interval } from 'luxon';
В проектах на старых версиях Node.js или при использовании CommonJS
применяется require.
const { DateTime } = require('luxon');
const { DateTime } = require('luxon');
const now = DateTime.now();
console.log(now.toISO());
Luxon может использоваться без сборщиков и пакетных менеджеров — напрямую в браузере через CDN.
<script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script>
После подключения библиотека становится доступной через глобальный
объект luxon.
<script>
const DateTime = luxon.DateTime;
const now = DateTime.now();
console.log(now.toISO());
</script>
Альтернативный CDN-сервис:
<script src="https://unpkg.com/luxon/build/global/luxon.min.js"></script>
Полный пример HTML-документа:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Luxon</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/luxon@3/build/global/luxon.min.js"></script>
<script>
const { DateTime } = luxon;
const currentDate = DateTime.now();
console.log(currentDate.toFormat('dd.MM.yyyy'));
</script>
</body>
</html>
Luxon полностью совместим со средой Node.js.
import { DateTime } from 'luxon';
const current = DateTime.now();
console.log(current.toISO());
node index.js
Чтобы использовать синтаксис import, необходимо указать
тип модулей в package.json.
{
"type": "module"
}
После этого Node.js будет воспринимать файлы .js как
ES-модули.
Простейший способ убедиться, что библиотека работает корректно:
import { DateTime } from 'luxon';
console.log(DateTime.now().toISO());
Если в консоли появляется ISO-дата, библиотека подключена успешно.
Luxon экспортирует несколько ключевых классов.
Основной класс для работы с датой и временем.
import { DateTime } from 'luxon';
Используется для представления продолжительности.
import { Duration } from 'luxon';
Применяется для работы с временными интервалами.
import { Interval } from 'luxon';
Позволяет изменять глобальные настройки библиотеки.
import { Settings } from 'luxon';
import {
DateTime,
Duration,
Interval,
Settings
} from 'luxon';
Перед установкой важно учитывать версию библиотеки.
npm install luxon@3
npm install luxon@3.4.4
npm list luxon
{
"dependencies": {
"luxon": "^3.4.4"
}
}
Luxon содержит встроенные типы и не требует отдельной установки
@types.
npm install luxon
import { DateTime } from 'luxon';
const now: DateTime = DateTime.now();
console.log(now.toISO());
Подключение Luxon в React-приложении ничем не отличается от обычного JavaScript-проекта.
npm install luxon
import { DateTime } from 'luxon';
function App() {
const now = DateTime.now();
return (
<div>
{now.toFormat('dd.MM.yyyy')}
</div>
);
}
export default App;
import { DateTime } from 'luxon';
export default {
data() {
return {
date: DateTime.now().toISO()
};
}
};
npm install luxon
import { Component } from '@angular/core';
import { DateTime } from 'luxon';
@Component({
selector: 'app-root',
template: `<h1>{{ currentDate }}</h1>`
})
export class AppComponent {
currentDate = DateTime.now().toFormat('dd.MM.yyyy');
}
Luxon отлично работает со сборщиком Vite.
npm install luxon
import { DateTime } from 'luxon';
Дополнительная конфигурация обычно не требуется.
Для проектов на Webpack библиотека подключается стандартным образом.
npm install luxon
import { DateTime } from 'luxon';
Luxon использует API Intl. В старых браузерах поддержка
может отсутствовать частично или полностью.
Intl;Использование полифилов:
npm install intl
Подключение:
import 'intl';
console.log(typeof Intl);
Если выводится:
object
то базовая поддержка присутствует.
Некоторые окружения требуют дополнительных пакетов для корректной работы часовых поясов.
Пример:
npm install @formatjs/intl-datetimeformat
Пример минимального проекта:
project/
│
├── node_modules/
├── package.json
├── index.js
└── src/
└── app.js
{
"type": "module",
"dependencies": {
"luxon": "^3.4.4"
}
}
import { DateTime } from 'luxon';
const current = DateTime.now();
console.log(current.toFormat('dd.MM.yyyy HH:mm'));
node app.js
Причина — Node.js воспринимает файл как CommonJS.
Добавить в package.json:
{
"type": "module"
}
Использовать require:
const { DateTime } = require('luxon');
Появляется при использовании CDN, если библиотека подключена после основного скрипта.
<script>
console.log(luxon);
</script>
<script src="luxon.min.js"></script>
<script src="luxon.min.js"></script>
<script>
console.log(luxon);
</script>
Причины:
node_modules.Повторная установка:
npm install
или:
npm install luxon
| Окружение | Способ подключения |
|---|---|
| Node.js ES Modules | import { DateTime } from 'luxon' |
| Node.js CommonJS | require('luxon') |
| Browser CDN | luxon.DateTime |
| TypeScript | import { DateTime } from 'luxon' |
| React/Vue/Angular | стандартный import |
import { DateTime } from 'luxon';
console.log(typeof DateTime.now);
Результат:
function
import { DateTime } from 'luxon';
const now = DateTime.now();
console.log(now.year);
console.log(now.month);
console.log(now.day);
console.log(now.hour);
console.log(now.minute);
import { DateTime } from 'luxon';
const now = DateTime.now().setLocale('ru');
console.log(now.toLocaleString(DateTime.DATE_FULL));
Luxon поддерживает tree shaking в современных сборщиках.
import { DateTime } from 'luxon';
import * as luxon from 'luxon';
Точечные импорты уменьшают итоговый размер сборки.
Среда Deno поддерживает импорт напрямую по URL.
import { DateTime } from 'https://esm.sh/luxon';
В среде Bun установка выполняется стандартно:
bun add luxon
Импорт:
import { DateTime } from 'luxon';