Установка и подключение

Библиотека Luxon предназначена для работы с датой, временем, часовыми поясами, локалями и форматированием в приложениях на JavaScript. Она была создана как современная альтернатива устаревающим подходам работы с объектом Date и предоставляет более удобный, предсказуемый и читаемый API.

Luxon построен поверх стандарта Intl, встроенного в современные браузеры и среду Node.js, благодаря чему поддерживает локализацию и работу с часовыми поясами без подключения громоздких зависимостей.

Основные сущности библиотеки:

  • DateTime — работа с датой и временем;
  • Duration — интервалы времени;
  • Interval — временные диапазоны;
  • настройки локализации и таймзон.

Установка через npm

Наиболее распространённый способ подключения Luxon в современных проектах — установка через пакетный менеджер npm.

Команда установки

npm install luxon

После установки библиотека появляется в каталоге node_modules и может импортироваться в любой модуль проекта.

Проверка установки

Файл package.json после установки содержит зависимость:

{
  "dependencies": {
    "luxon": "^3.0.0"
  }
}

Установка через yarn

При использовании менеджера пакетов yarn применяется аналогичная команда:

yarn add luxon

Установка через pnpm

Для проектов, использующих pnpm, установка выполняется следующим образом:

pnpm add luxon

Подключение в ES Modules

Современный JavaScript использует синтаксис ES-модулей (import/export). Luxon полностью поддерживает такой формат.

Импорт DateTime

import { DateTime } from 'luxon';

Создание объекта даты

import { DateTime } from 'luxon';

const now = DateTime.now();

console.log(now.toString());

Импорт нескольких сущностей

import { DateTime, Duration, Interval } from 'luxon';

Подключение в CommonJS

В проектах на старых версиях Node.js или при использовании CommonJS применяется require.

Подключение библиотеки

const { DateTime } = require('luxon');

Пример использования

const { DateTime } = require('luxon');

const now = DateTime.now();

console.log(now.toISO());

Подключение через CDN

Luxon может использоваться без сборщиков и пакетных менеджеров — напрямую в браузере через CDN.

Подключение через jsDelivr

<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>

Подключение через unpkg

Альтернативный 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>

Подключение в Node.js

Luxon полностью совместим со средой Node.js.

Пример файла index.js

import { DateTime } from 'luxon';

const current = DateTime.now();

console.log(current.toISO());

Запуск

node index.js

Настройка ES Modules в Node.js

Чтобы использовать синтаксис import, необходимо указать тип модулей в package.json.

{
  "type": "module"
}

После этого Node.js будет воспринимать файлы .js как ES-модули.


Проверка корректности подключения

Простейший способ убедиться, что библиотека работает корректно:

import { DateTime } from 'luxon';

console.log(DateTime.now().toISO());

Если в консоли появляется ISO-дата, библиотека подключена успешно.


Структура импортов

Luxon экспортирует несколько ключевых классов.

DateTime

Основной класс для работы с датой и временем.

import { DateTime } from 'luxon';

Duration

Используется для представления продолжительности.

import { Duration } from 'luxon';

Interval

Применяется для работы с временными интервалами.

import { Interval } from 'luxon';

Settings

Позволяет изменять глобальные настройки библиотеки.

import { Settings } from 'luxon';

Использование всех сущностей одновременно

import {
    DateTime,
    Duration,
    Interval,
    Settings
} from 'luxon';

Версии Luxon

Перед установкой важно учитывать версию библиотеки.

Установка конкретной версии

npm install luxon@3

Установка определённого релиза

npm install luxon@3.4.4

Проверка установленной версии

Через npm

npm list luxon

Через package.json

{
  "dependencies": {
    "luxon": "^3.4.4"
  }
}

Использование TypeScript

Luxon содержит встроенные типы и не требует отдельной установки @types.

Установка

npm install luxon

Пример TypeScript-кода

import { DateTime } from 'luxon';

const now: DateTime = DateTime.now();

console.log(now.toISO());

Использование в React

Подключение 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;

Использование в Vue

import { DateTime } from 'luxon';

export default {
    data() {
        return {
            date: DateTime.now().toISO()
        };
    }
};

Использование в Angular

Установка

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');

}

Подключение в Vite

Luxon отлично работает со сборщиком Vite.

Установка

npm install luxon

Импорт

import { DateTime } from 'luxon';

Дополнительная конфигурация обычно не требуется.


Подключение в Webpack

Для проектов на Webpack библиотека подключается стандартным образом.

Установка

npm install luxon

Использование

import { DateTime } from 'luxon';

Работа в старых браузерах

Luxon использует API Intl. В старых браузерах поддержка может отсутствовать частично или полностью.

Возможные проблемы

  • отсутствие поддержки Intl;
  • ограниченная поддержка таймзон;
  • ошибки локализации.

Решение

Использование полифилов:

npm install intl

Подключение:

import 'intl';

Проверка поддержки Intl

console.log(typeof Intl);

Если выводится:

object

то базовая поддержка присутствует.


Подключение полифилов для таймзон

Некоторые окружения требуют дополнительных пакетов для корректной работы часовых поясов.

Пример:

npm install @formatjs/intl-datetimeformat

Структура проекта с Luxon

Пример минимального проекта:

project/
│
├── node_modules/
├── package.json
├── index.js
└── src/
    └── app.js

Минимальный рабочий пример

package.json

{
  "type": "module",
  "dependencies": {
    "luxon": "^3.4.4"
  }
}

app.js

import { DateTime } from 'luxon';

const current = DateTime.now();

console.log(current.toFormat('dd.MM.yyyy HH:mm'));

Запуск

node app.js

Ошибка “Cannot use import statement outside a module”

Причина — Node.js воспринимает файл как CommonJS.

Решения

Вариант 1

Добавить в package.json:

{
  "type": "module"
}

Вариант 2

Использовать require:

const { DateTime } = require('luxon');

Ошибка “luxon is not defined”

Появляется при использовании CDN, если библиотека подключена после основного скрипта.

Неправильно

<script>
    console.log(luxon);
</script>

<script src="luxon.min.js"></script>

Правильно

<script src="luxon.min.js"></script>

<script>
    console.log(luxon);
</script>

Ошибка “Cannot find module ‘luxon’”

Причины:

  • библиотека не установлена;
  • повреждены зависимости;
  • отсутствует каталог 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

Проверка доступности API Luxon

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

Среда Deno поддерживает импорт напрямую по URL.

import { DateTime } from 'https://esm.sh/luxon';

Использование с Bun

В среде Bun установка выполняется стандартно:

bun add luxon

Импорт:

import { DateTime } from 'luxon';