Метод minus в библиотеке Luxon используется для
вычитания временных промежутков из объекта DateTime. Он
позволяет уменьшать дату и время на заданное количество дней, часов,
минут, месяцев и других единиц времени.
Метод не изменяет исходный объект. Вместо этого создаётся новый
экземпляр DateTime с обновлённым значением даты.
DateTime.minus(duration)
Метод принимает:
Duration;import { DateTime } from "luxon";
const date = DateTime.now();
const result = date.minus({ days: 5 });
console.log(result.toISO());
Из текущей даты вычитается 5 дней. Если сегодня
2026-05-23, результатом станет 2026-05-18.
Метод поддерживает одновременное вычитание разных временных единиц.
const result = DateTime.now().minus({
days: 2,
hours: 4,
minutes: 30
});
console.log(result.toISO());
Luxon корректно пересчитывает итоговую дату с учётом всех компонентов.
Метод minus работает со следующими единицами:
| Единица | Описание |
|---|---|
| years | годы |
| quarters | кварталы |
| months | месяцы |
| weeks | недели |
| days | дни |
| hours | часы |
| minutes | минуты |
| seconds | секунды |
| milliseconds | миллисекунды |
const date = DateTime.fromISO("2026-05-15");
const result = date.minus({ months: 2 });
console.log(result.toISODate());
Результат:
2026-03-15
Вычитание месяцев работает календарным образом, а не как фиксированное количество дней.
const date = DateTime.fromISO("2026-03-31");
const result = date.minus({ months: 1 });
console.log(result.toISODate());
Результат:
2026-02-28
В феврале нет 31 числа, поэтому Luxon автоматически корректирует дату до последнего валидного дня месяца.
Это важное отличие календарных вычислений от арифметики миллисекунд.
const result = DateTime.now().minus({ years: 1 });
console.log(result.toISO());
Метод учитывает:
const result = DateTime.now().minus({ hours: 6 });
const result = DateTime.now().minus({ minutes: 45 });
const result = DateTime.now().minus({ seconds: 30 });
const result = DateTime.now().minus({ weeks: 3 });
console.log(result.toISODate());
Неделя интерпретируется как 7 календарных дней.
DurationМетод minus может принимать объект
Duration.
import { DateTime, Duration } from "luxon";
const duration = Duration.fromObject({
days: 1,
hours: 2
});
const result = DateTime.now().minus(duration);
console.log(result.toISO());
Duration особенно удобен:
Метод принимает обычное число.
const result = DateTime.now().minus(60000);
console.log(result.toISO());
Результат уменьшится на 60 000 миллисекунд, то есть на 1 минуту.
Объекты DateTime являются неизменяемыми.
const original = DateTime.now();
const updated = original.minus({ days: 1 });
console.log(original.toISO());
console.log(updated.toISO());
original остаётся без изменений.
Это исключает множество ошибок, связанных со случайной модификацией даты.
Метод удобно комбинируется с другими операциями.
const result = DateTime.now()
.minus({ days: 7 })
.startOf("day")
.toISO();
console.log(result);
Метод сохраняет текущую временную зону объекта.
const date = DateTime.now().setZone("Europe/Berlin");
const result = date.minus({ hours: 3 });
console.log(result.zoneName);
Результат:
Europe/Berlin
const date = DateTime.fromISO("2026-05-10T01:00");
const result = date.minus({ hours: 3 });
console.log(result.toISO());
Результат:
2026-05-09T22:00:00.000
Luxon автоматически переносит дату на предыдущий день.
const date = DateTime.fromISO("2026-01-01");
const result = date.minus({ days: 1 });
console.log(result.toISODate());
Результат:
2025-12-31
DST — переход на летнее и зимнее время.
const date = DateTime.fromISO(
"2026-03-29T03:00",
{ zone: "Europe/Berlin" }
);
const result = date.minus({ hours: 1 });
console.log(result.toISO());
Luxon корректно обрабатывает изменения смещения UTC.
minus({ hours: 24 }) и minus({ days: 1 })На первый взгляд операции выглядят одинаково, однако при переходах DST результат может отличаться.
date.minus({ days: 1 });
Работает как календарное смещение.
date.minus({ hours: 24 });
Работает как точный временной интервал.
Во время перехода на летнее время сутки могут содержать 23 часа, а во время перехода на зимнее — 25 часов.
Intervalimport { DateTime, Interval } from "luxon";
const end = DateTime.now();
const start = end.minus({ days: 30 });
const interval = Interval.fromDateTimes(start, end);
console.log(interval.length("days"));
const expiresAt = DateTime.now();
const refreshTime = expiresAt.minus({ minutes: 5 });
console.log(refreshTime.toISO());
Обновление токена произойдёт за 5 минут до окончания срока действия.
function getLastWeekDate() {
return DateTime.now()
.minus({ weeks: 1 })
.toISODate();
}
console.log(getLastWeekDate());
const limitDate = DateTime.now().minus({ days: 90 });
const filtered = records.filter(item => {
return DateTime.fromISO(item.createdAt) >= limitDate;
});
const deadline = DateTime.fromISO("2026-06-01");
const warningDate = deadline.minus({ days: 3 });
console.log(warningDate.toISODate());
minusНеверно:
const date = DateTime.now();
date.minus({ days: 1 });
console.log(date.toISO());
Дата не изменится.
const updated = date.minus({ days: 1 });
minus({ days: 1 })
и
minus({ hours: 24 })
не всегда эквивалентны.
Особенно это важно при:
Метод minus работает быстро, поскольку:
DateTime;Intl;Однако при массовых вычислениях в циклах рекомендуется:
Duration;Dateconst date = new Date();
date.setDate(date.getDate() - 5);
Проблемы подхода:
const result = DateTime.now().minus({ days: 5 });
Преимущества:
plus и
minusconst result = DateTime.now()
.plus({ months: 1 })
.minus({ days: 7 });
console.log(result.toISO());
Такой подход часто используется:
const result = DateTime.now().minus({ days: 10 });
console.log(result.isValid);
Свойство isValid позволяет убедиться, что объект даты
корректен.
const result = DateTime.now()
.minus({ days: 3 })
.toFormat("dd.MM.yyyy");
console.log(result);
Результат:
20.05.2026
date.minus({ days: 5 });
date.minus({ hours: 2 });
date.minus({ months: 1 });
date.minus({
days: 2,
minutes: 30
});
Durationdate.minus(duration);