Квартал — это календарный интервал, представляющий собой одну из четырёх частей года. В Day.js работа с кварталами реализуется через отдельный плагин и набор встроенных методов форматирования и вычисления дат. Каждый квартал охватывает три месяца:
Day.js не включает функциональность кварталов в базовую сборку, поэтому требуется подключение плагина.
Для работы с номером квартала используется плагин
quarterOfYear.
import dayjs from 'dayjs';
import quarterOfYear from 'dayjs/plugin/quarterOfYear';
dayjs.extend(quarterOfYear);
После расширения экземпляры Day.js получают доступ к методу
quarter().
Метод quarter() возвращает номер квартала текущей
даты.
dayjs('2026-01-15').quarter(); // 1
dayjs('2026-05-10').quarter(); // 2
dayjs('2026-11-01').quarter(); // 4
Логика определения квартала основана на месяце:
Метод quarter() также работает как сеттер, позволяя
изменить дату, установив конкретный квартал.
dayjs('2026-01-15').quarter(3).format();
// 2026-07-15T00:00:00Z (или локальное время)
При установке квартала Day.js автоматически пересчитывает месяц, сохраняя день, если это возможно. В случае переполнения даты происходит корректировка.
Day.js поддерживает токен Q для вывода номера квартала
через форматирование.
dayjs('2026-02-10').format('Q'); // "1"
dayjs('2026-08-10').format('Q'); // "3"
Часто используется комбинированное форматирование:
dayjs('2026-08-10').format('[Q]Q YYYY');
// Q3 2026
Квадратные скобки фиксируют буквальный вывод символов.
Для работы с границами квартала используются методы
startOf и endOf.
dayjs('2026-05-20').startOf('quarter').format();
// 2026-04-01T00:00:00Z
dayjs('2026-05-20').endOf('quarter').format();
// 2026-06-30T23:59:59Z
Эти операции полезны для:
Внутренняя логика Day.js базируется на целочисленном делении номера месяца:
quarter = Math.floor(month / 3) + 1
Где month — значение от 0 до 11.
Пример:
При установке квартала Day.js вычисляет первый месяц соответствующего периода:
dayjs().quarter(2);
Эквивалентно переходу к апрелю текущего года. Далее сохраняется день месяца, если он допустим для нового месяца.
Кварталы часто применяются при аналитической обработке данных:
const dates = [
dayjs('2026-01-10'),
dayjs('2026-02-15'),
dayjs('2026-07-20'),
];
const grouped = {};
dates.forEach(date => {
const q = date.year() + '-Q' + date.quarter();
if (!grouped[q]) grouped[q] = [];
grouped[q].push(date.format('YYYY-MM-DD'));
});
Результат группирует даты по кварталам одного года.
Day.js не предоставляет специального типа сравнения кварталов, но его легко реализовать через комбинацию года и квартала:
const a = dayjs('2026-02-10');
const b = dayjs('2026-05-10');
const sameQuarter = a.year() === b.year() && a.quarter() === b.quarter();
Методы startOf('quarter') и
endOf('quarter') учитывают временную точность:
Это важно при работе с базами данных и API, где диапазоны дат должны быть строго определены.
Комбинация года и квартала часто используется для бизнес-логики:
function formatQuarter(date) {
return `Q${date.quarter()} ${date.year()}`;
}
formatQuarter(dayjs('2026-09-12')); // Q3 2026
quarter() сохраняет
корректную привязкуЧасто встречаются следующие проблемы:
format('Q') без подключения плагинаextendstartOf('quarter') на время
сутокconst filterByQuarter = (list, year, quarter) => {
return list.filter(item => {
const d = dayjs(item.date);
return d.year() === year && d.quarter() === quarter;
});
};
Такой подход применяется при обработке больших массивов временных записей.
Поскольку вычисление квартала основано на простом делении, операции
quarter() являются дешёвыми и не требуют дополнительной
памяти или сложных преобразований. Это делает их подходящими для
массовой обработки дат в циклах и потоках данных.