Квартал в Moment.js определяется как часть года, состоящая из трёх месяцев. Всего календарный год делится на четыре квартала:
Основной способ получения номера квартала — использование метода
quarter():
const moment = require('moment');
const now = moment();
const q = now.quarter();
console.log(q);
Метод возвращает целое число от 1 до 4, соответствующее текущему кварталу даты.
Квартал можно определить для любой даты, переданной в Moment:
const date = moment('2026-05-21');
console.log(date.quarter());
Результат будет зависеть от месяца указанной даты.
Метод quarter() работает не только как геттер, но и как
сеттер. Можно изменить квартал у объекта Moment:
const date = moment('2026-01-15');
date.quarter(3);
console.log(date.format('YYYY-MM-DD'));
При изменении квартала сохраняется день месяца по возможности, но если он выходит за пределы нового квартала, Moment автоматически корректирует дату.
Для работы с диапазоном квартала используются методы
startOf() и endOf():
const date = moment('2026-05-21');
const start = date.startOf('quarter');
const end = date.endOf('quarter');
console.log(start.format('YYYY-MM-DD'));
console.log(end.format('YYYY-MM-DD'));
startOf('quarter') устанавливает дату на первый день
первого месяца квартала, а endOf('quarter') — на последний
день последнего месяца квартала с максимальным временем суток.
Moment.js поддерживает токен Q для вывода номера
квартала в строковом формате:
const date = moment('2026-05-21');
console.log(date.format('Q'));
Также возможно комбинировать с другими форматами:
console.log(date.format('YYYY [Q]Q'));
Результат будет содержать год и номер квартала.
Квартал вычисляется на основе месяца:
Внутренне Moment.js использует деление индекса месяца на 3 с округлением вниз.
Квартал часто применяется для группировки дат:
const dates = [
moment('2026-01-10'),
moment('2026-04-12'),
moment('2026-07-19'),
moment('2026-10-03')
];
const grouped = {};
dates.forEach(d => {
const q = d.quarter();
if (!grouped[q]) {
grouped[q] = [];
}
grouped[q].push(d.format('YYYY-MM-DD'));
});
console.log(grouped);
При необходимости можно выполнять арифметику с кварталами через месяцы:
const date = moment('2026-05-21');
const nextQuarter = date.clone().add(3, 'months');
const prevQuarter = date.clone().subtract(3, 'months');
console.log(nextQuarter.format('YYYY-MM-DD'));
console.log(prevQuarter.format('YYYY-MM-DD'));
Для расчёта попадания даты в квартал часто используется сравнение с границами:
const date = moment('2026-05-21');
const start = moment(date).startOf('quarter');
const end = moment(date).endOf('quarter');
const isInQuarter = date.isBetween(start, end, undefined, '[]');
console.log(isInQuarter);
QstartOf() и endOf()