Квартал в Luxon рассматривается как производная календарная единица, основанная на делении года на четыре равные части по три месяца. В рамках библиотеки Luxon кварталы реализованы как часть календарной модели DateTime и используются для группировки дат, вычисления диапазонов и построения временной логики уровня бизнес-аналитики.
Календарный квартал — это фиксированный интервал:
В Luxon квартал вычисляется исключительно на основе месяца, без учёта внешних финансовых или кастомных календарей.
Основной способ получения квартала — использование свойства
quarter у объекта DateTime.
import { DateTime } from "luxon";
const dt = DateTime.local(2026, 5, 23);
dt.quarter; // 2
Логика вычисления проста: месяц преобразуется в номер квартала по формуле:
Luxon поддерживает форматирование квартала через токен
q.
DateTime.local(2026, 5, 23).toFormat("q"); // "2"
При необходимости можно комбинировать с другими календарными токенами:
DateTime.local(2026, 5, 23).toFormat("yyyy 'Q' q"); // "2026 Q 2"
Особенность заключается в том, что q возвращает номер
квартала без ведущих символов и без локализационных преобразований.
Для работы с диапазонами Luxon предоставляет методы
startOf и endOf.
DateTime.local(2026, 5, 23)
.startOf("quarter")
Результат:
DateTime.local(2026, 5, 23)
.endOf("quarter")
Результат:
Эти методы опираются на внутреннюю календарную модель и учитывают длину месяцев, включая високосные годы.
Luxon позволяет выполнять смещения по кварталам через метод
plus и minus, используя объектную форму
длительности.
const dt = DateTime.local(2026, 1, 15);
dt.plus({ quarters: 1 });
// 2026-04-15
dt.minus({ quarters: 2 });
// 2025-07-15
При добавлении кварталов происходит эквивалентное добавление трёх месяцев за один шаг, с автоматической нормализацией дат.
При пересечении границы года сохраняется корректная календарная логика:
DateTime.local(2026, 11, 10)
.plus({ quarters: 1 });
Результат:
Здесь происходит переход из IV квартала текущего года в I квартал следующего.
Квартал часто используется для построения временных интервалов. Luxon
позволяет комбинировать startOf и endOf для
создания диапазонов:
const start = DateTime.local().startOf("quarter");
const end = DateTime.local().endOf("quarter");
const interval = start.until(end);
Такой интервал можно использовать для фильтрации дат, агрегации данных и вычислений.
Квартал тесно связан с другими единицами:
month)week)year)При вызове startOf('quarter') происходит каскадная
нормализация:
В Luxon квартал не зависит от локали. Независимо от настроек языка или региона:
Это важно для систем, где требуется стабильная временная модель, например в аналитике и логировании.
Свойство quarter:
monthconst dt = DateTime.local(2026, 12, 31);
dt.quarter; // 4
dt.month; // 12
Любое изменение месяца автоматически меняет квартал при пересчёте объекта.
При создании DateTime через fromObject квартал напрямую
не задаётся, но может быть использован косвенно через месяц:
DateTime.fromObject({
year: 2026,
month: 8
});
Здесь квартал определяется автоматически как III.
Типичный шаблон работы с кварталом включает три шага:
const dt = DateTime.local();
const quarterStart = dt.startOf("quarter");
const quarterEnd = dt.endOf("quarter");
const quarterNumber = dt.quarter;
Эта комбинация используется для построения отчётных периодов и временных срезов.
При построении бизнес-логики кварталы часто используются в агрегатных функциях:
Luxon обеспечивает стабильную основу для таких операций через строгую календарную модель без скрытых смещений или округлений.