В библиотеке Luxon объект Duration представляет длительность времени, независимую от конкретной даты и времени. Он используется для описания интервалов вроде «2 часа 30 минут» или «5000 миллисекунд» и поддерживает преобразования между различными единицами измерения.
Duration.fromObject()Создаёт длительность из набора полей времени.
Основные единицы:
yearsmonthsweeksdayshoursminutessecondsmillisecondsПример структуры:
const dur = luxon.Duration.fromObject({
hours: 2,
minutes: 30
});
Особенности:
Duration.fromMillis()Создаёт длительность из количества миллисекунд.
const dur = luxon.Duration.fromMillis(9000000);
Особенности:
Duration.fromISO()Парсинг длительности в формате ISO 8601.
const dur = luxon.Duration.fromISO("PT2H30M");
Поддерживаемые форматы:
P1Y2M10D (годы, месяцы, дни)PT5H20M10S (время)Особенности:
toObject()Преобразует Duration в обычный объект JavaScript.
const dur = luxon.Duration.fromObject({ hours: 1, minutes: 15 });
dur.toObject();
// { hours: 1, minutes: 15 }
Особенности:
toMillis()Преобразует длительность в миллисекунды.
const dur = luxon.Duration.fromObject({ seconds: 90 });
dur.toMillis();
// 90000
Особенности:
valueOf()Возвращает числовое представление Duration.
const dur = luxon.Duration.fromObject({ seconds: 10 });
+dur; // 10000
Особенности:
toISO()Преобразует Duration в строку ISO 8601.
const dur = luxon.Duration.fromObject({ hours: 2, minutes: 30 });
dur.toISO();
// "PT2H30M"
Особенности:
toISOTime()Преобразует Duration в формат времени.
const dur = luxon.Duration.fromObject({
hours: 1,
minutes: 45,
seconds: 30
});
dur.toISOTime();
// "01:45:30"
Особенности:
toHuman()Возвращает человекочитаемое представление длительности.
const dur = luxon.Duration.fromObject({
hours: 3,
minutes: 5
});
dur.toHuman();
// "3 hours, 5 minutes"
Особенности:
plus()Складывает две длительности.
const a = luxon.Duration.fromObject({ hours: 1 });
const b = luxon.Duration.fromObject({ minutes: 30 });
a.plus(b).toObject();
// { hours: 1, minutes: 30 }
Особенности:
minus()Вычитает одну длительность из другой.
const a = luxon.Duration.fromObject({ hours: 2 });
const b = luxon.Duration.fromObject({ minutes: 30 });
a.minus(b).toObject();
Особенности:
shiftTo()Переводит Duration в указанные единицы.
const dur = luxon.Duration.fromObject({
seconds: 3600
});
dur.shiftTo("hours").toObject();
// { hours: 1 }
Особенности:
normalize()Приводит длительность к стандартному виду.
const dur = luxon.Duration.fromObject({
minutes: 120
});
dur.normalize().toObject();
// { hours: 2 }
Особенности:
get()Возвращает значение конкретной единицы.
const dur = luxon.Duration.fromObject({
hours: 5,
minutes: 20
});
dur.get("hours"); // 5
Особенности:
0, если единица отсутствуетset()Изменяет значения единиц.
const dur = luxon.Duration.fromObject({ hours: 1 });
const upd ated = dur.se t({ minutes: 45 });
Особенности:
isValidПроверяет корректность объекта Duration.
const dur = luxon.Duration.invalid("error");
dur.isValid; // false
Особенности:
invalidExplanationВозвращает описание ошибки.
dur.invalidExplanation;
Особенности:
as()Возвращает длительность в заданной единице.
const dur = luxon.Duration.fromObject({ hours: 2 });
dur.as("minutes"); // 120
Особенности:
Duration в Luxon строится как неизменяемая структура. Любая операция — будь то сложение, изменение единиц или преобразование формата — возвращает новый объект.
Ключевые принципы:
Модель хранения позволяет одновременно работать с календарными (месяцы, годы) и абсолютными (секунды, миллисекунды) величинами, избегая потери точности при конверсиях.
toFormat()Форматирует Duration по пользовательскому шаблону.
const dur = luxon.Duration.fromObject({
hours: 2,
minutes: 5
});
dur.toFormat("hh:mm");
// "02:05"
Особенности:
При работе с разными единицами (например, дни и минуты одновременно) Duration не приводит значения автоматически до вызова соответствующих методов. Это позволяет сохранить семантику исходных данных.
const dur = luxon.Duration.fromObject({
days: 1,
minutes: 90
});
Нормализация будет выполнена только при вызове:
normalize()toMillis()Такой подход предотвращает неожиданное изменение структуры данных.