Работа с кварталами в Moment.js основана на стандартной календарной логике: год делится на четыре периода по три месяца, и каждому периоду соответствует значение от 1 до 4. Квартальная модель используется в финансовых расчётах, аналитике, отчётности и планировании временных интервалов.
Квартал определяется как часть года:
Внутри Moment.js квартал является производной от месяца: январь соответствует 1 кварталу, декабрь — 4 кварталу.
Для получения текущего квартала используется метод
quarter():
moment().quarter()
Возвращаемое значение — число от 1 до 4.
Примеры:
moment('2026-01-15').quarter() // 1
moment('2026-05-10').quarter() // 2
moment('2026-08-01').quarter() // 3
moment('2026-11-30').quarter() // 4
Квартал вычисляется автоматически на основе месяца даты, без необходимости дополнительных преобразований.
Метод quarter(value) позволяет задать квартал для
существующего объекта даты:
moment().quarter(2)
Установка квартала изменяет месяц внутри текущего года так, чтобы дата оказалась внутри соответствующего диапазона:
moment('2026-01-15').quarter(3).format('YYYY-MM-DD')
Результат будет находиться в диапазоне третьего квартала (июль–сентябрь), при этом день месяца сохраняется, если он валиден для нового месяца.
Поведение при установке:
Для получения начала и конца квартала используется метод
startOf() и endOf() с аргументом
'quarter'.
Начало квартала:
moment('2026-05-10').startOf('quarter')
Результат:
00:00:00.000Конец квартала:
moment('2026-05-10').endOf('quarter')
Результат:
23:59:59.999Квартальные границы вычисляются строго на основе календарной структуры года.
Moment.js поддерживает специальные токены форматирования для отображения квартала:
Q — номер квартала (1–4)Qo — порядковый формат (1st, 2nd, 3rd, 4th)Примеры:
moment('2026-02-10').format('Q')
// 1
moment('2026-02-10').format('Qo')
// 1st
Квартал может комбинироваться с другими токенами даты:
moment('2026-08-15').format('YYYY [Q]Q')
// 2026 Q3
Квартал часто используется в цепочках преобразований даты:
moment()
.quarter(4)
.startOf('quarter')
.format('YYYY-MM-DD')
В таких выражениях порядок операций имеет значение: сначала устанавливается квартал, затем вычисляются его границы.
Каждый квартал охватывает строго три месяца:
При установке квартала библиотека пересчитывает месяц автоматически, опираясь на базовую формулу:
месяц = (квартал - 1) * 3
Эта логика используется как при чтении, так и при записи значения квартала.
Кварталы применяются для группировки дат:
const dates = [
'2026-01-10',
'2026-03-22',
'2026-07-05',
'2026-11-19'
]
const grouped = dates.reduce((acc, d) => {
const q = moment(d).quarter()
acc[q] = acc[q] || []
acc[q].push(d)
return acc
}, {})
Результатом становится структура, распределяющая значения по кварталам года.
Кварталы можно использовать для логического сравнения периодов:
moment('2026-04-01').quarter() > moment('2026-02-01').quarter()
Такое сравнение отражает порядок внутри года, но не учитывает переход между годами, поэтому для межгодовых сравнений требуется учитывать также год.
Комбинация методов позволяет строить отчётные периоды:
const start = moment().quarter(2).startOf('quarter')
const end = moment().quarter(2).endOf('quarter')
В результате формируется полный диапазон дат второго квартала текущего года.
При изменении года через year() квартал пересчитывается
автоматически:
moment('2025-12-15')
.year(2026)
.quarter()
Значение квартала сохраняется в рамках нового года, но фактический месяц может измениться при установке границ.
Квартал не хранится как отдельное поле даты. Он вычисляется динамически на основе месяца. Это означает: