Библиотека Luxon предназначена для удобной работы с датой, временем,
часовыми поясами и локализацией в JavaScript. Основным объектом
библиотеки является DateTime.
Установка через npm:
npm install luxon
Подключение:
import { DateTime } from 'luxon'
Для CommonJS:
const { DateTime } = require('luxon')
Самый распространённый способ создания объекта — получение текущего момента времени.
const now = DateTime.now()
console.log(now)
Объект содержит:
Пример вывода:
DateTime {
ts: 1716451200000,
zone: UTC+3,
locale: ru,
...
}
ISO 8601 — стандартный формат хранения даты и времени.
const dt = DateTime.fromISO('2025-06-15T14:30:00')
console.log(dt.toString())
Строка может содержать:
const dt = DateTime.fromISO('2025-06-15')
const dt = DateTime.fromISO('2025-06-15T14:30:00')
const dt = DateTime.fromISO('2025-06-15T14:30:00+02:00')
Метод fromObject() позволяет вручную указать части
даты.
const dt = DateTime.fromObject({
year: 2025,
month: 6,
day: 15,
hour: 14,
minute: 30
})
fromObject() поддерживает большое количество
параметров.
| Поле | Описание |
|---|---|
year |
Год |
month |
Месяц |
day |
День |
hour |
Час |
minute |
Минута |
second |
Секунда |
millisecond |
Миллисекунда |
Пример:
const dt = DateTime.fromObject({
year: 2025,
month: 12,
day: 31,
hour: 23,
minute: 59,
second: 45,
millisecond: 120
})
Если время не указано, Luxon автоматически устанавливает его в начало суток.
const dt = DateTime.fromObject({
year: 2025,
month: 5,
day: 10
})
console.log(dt.toISO())
Результат:
2025-05-10T00:00:00.000+03:00
Luxon всё равно создаёт полноценную дату, используя текущий день.
const dt = DateTime.fromObject({
hour: 18,
minute: 45
})
Одно из главных преимуществ Luxon — встроенная работа с часовыми поясами.
const dt = DateTime.fromObject(
{
year: 2025,
month: 6,
day: 15,
hour: 12
},
{
zone: 'Europe/Moscow'
}
)
| Зона | Значение |
|---|---|
UTC |
Всемирное время |
Europe/Moscow |
Москва |
Asia/Almaty |
Алматы |
America/New_York |
Нью-Йорк |
Europe/London |
Лондон |
Asia/Tokyo |
Токио |
const dt = DateTime.utc()
console.log(dt.toString())
С указанием конкретной даты:
const dt = DateTime.utc(2025, 6, 15, 14, 30)
now() и
utc()DateTime.now()Создаёт дату в локальной временной зоне системы.
const local = DateTime.now()
DateTime.utc()Создаёт дату в UTC.
const utc = DateTime.utc()
Luxon умеет преобразовывать стандартный объект Date.
const jsDate = new Date()
const dt = DateTime.fromJSDate(jsDate)
Это особенно полезно при работе со старыми библиотеками и браузерным API.
Timestamp — количество миллисекунд с 1 января 1970 года.
const dt = DateTime.fromMillis(1718456400000)
Unix timestamp хранится в секундах.
const dt = DateTime.fromSeconds(1718456400)
fromMillis() от fromSeconds()DateTime.fromMillis(1718456400000)
DateTime.fromSeconds(1718456400)
Ошибка в выборе метода приводит к неправильной дате.
Luxon поддерживает SQL-представление даты.
const dt = DateTime.fromSQL('2025-06-15 14:30:00')
Формат часто используется в email-заголовках.
const dt = DateTime.fromRFC2822(
'Tue, 15 Jun 2025 14:30:00 +0300'
)
const dt = DateTime.fromHTTP(
'Sun, 15 Jun 2025 11:30:00 GMT'
)
Локаль влияет на:
const dt = DateTime.fromObject(
{
year: 2025,
month: 6,
day: 15
},
{
locale: 'ru'
}
)
const dt = DateTime.fromObject(
{
year: 2025,
month: 6,
day: 15,
hour: 18
},
{
zone: 'Asia/Almaty',
locale: 'ru'
}
)
Luxon не выбрасывает ошибку при невалидной дате. Вместо этого создаётся специальный объект.
const dt = DateTime.fromObject({
year: 2025,
month: 15,
day: 40
})
console.log(dt.isValid)
Результат:
false
console.log(dt.invalidReason)
console.log(dt.invalidExplanation)
Пример:
unit out of range
you specified 15 (of type number) as a month...
Можно указывать только нужные части даты.
const dt1 = DateTime.fromObject({
year: 2025
})
const dt2 = DateTime.fromObject({
year: 2025,
month: 10
})
Luxon корректирует некоторые значения автоматически.
const dt = DateTime.fromObject({
year: 2025,
month: 6,
day: 15,
hour: 25
})
Однако не все ошибки исправляются автоматически. Для надёжной работы
необходимо проверять isValid.
Метод fromFormat() позволяет разбирать строки
нестандартного формата.
const dt = DateTime.fromFormat(
'15.06.2025 14:30',
'dd.MM.yyyy HH:mm'
)
| Токен | Значение |
|---|---|
dd |
День |
MM |
Месяц |
yyyy |
Год |
HH |
Часы |
mm |
Минуты |
ss |
Секунды |
const dt = DateTime.fromFormat(
'15 июня 2025 18:45',
'dd LLLL yyyy HH:mm',
{
locale: 'ru'
}
)
setZoneПо умолчанию Luxon может конвертировать дату в локальную зону. Чтобы
сохранить исходную временную зону, используется
setZone.
const dt = DateTime.fromISO(
'2025-06-15T14:30:00+02:00',
{
setZone: true
}
)
DateTime является immutable-объектом. Это означает, что
объект нельзя изменить после создания.
const dt1 = DateTime.now()
const dt2 = dt1.plus({ days: 1 })
dt1 останется неизменным.
const original = DateTime.now()
const copy = original.set({})
Luxon поддерживает ISO-нумерацию недель.
const dt = DateTime.fromObject({
weekYear: 2025,
weekNumber: 25,
weekday: 3
})
weekday| Значение | День |
|---|---|
| 1 | Понедельник |
| 2 | Вторник |
| 3 | Среда |
| 4 | Четверг |
| 5 | Пятница |
| 6 | Суббота |
| 7 | Воскресенье |
Ordinal date использует номер дня в году.
const dt = DateTime.fromObject({
year: 2025,
ordinal: 150
})
const dt = DateTime.local()
Метод аналогичен:
DateTime.now()
const dt = DateTime.local(
2025,
6,
15,
14,
30
)
local()DateTime.local(
year,
month,
day,
hour,
minute,
second,
millisecond
)
const dt = DateTime.fromObject({
year: 2025,
month: 6,
day: 15,
millisecond: 450
})
JavaScript не поддерживает настоящую наносекундную точность. Luxon
также ограничен миллисекундами, так как работает поверх
Date.
const dt = DateTime.now().startOf('day')
const dt = DateTime.now().endOf('day')
const dt = DateTime.now().startOf('month')
const dt = DateTime.now().startOf('year')
const dt = DateTime.now()
.setZone('UTC')
.startOf('day')
.plus({ days: 5 })
Неправильно:
const dt = DateTime.fromISO('15.06.2025')
Метод fromISO() ожидает ISO-формат.
Правильно:
const dt = DateTime.fromFormat(
'15.06.2025',
'dd.MM.yyyy'
)
| Метод | Назначение |
|---|---|
now() |
Текущая дата |
local() |
Локальная дата |
utc() |
UTC-время |
fromISO() |
ISO-строка |
fromFormat() |
Пользовательский формат |
fromObject() |
Создание из полей |
fromJSDate() |
Из Date |
fromMillis() |
Из timestamp |
fromSeconds() |
Из Unix timestamp |
fromSQL() |
SQL-формат |
fromRFC2822() |
RFC2822 |
fromHTTP() |
HTTP-дата |