Получение квартала

Квартал в Moment.js определяется как часть года, состоящая из трёх месяцев. Всего календарный год делится на четыре квартала:

  • I квартал: январь — март
  • II квартал: апрель — июнь
  • III квартал: июль — сентябрь
  • IV квартал: октябрь — декабрь

Определение текущего квартала

Основной способ получения номера квартала — использование метода 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'));

Результат будет содержать год и номер квартала.

Квартал относительно года

Квартал вычисляется на основе месяца:

  • Январь (0) — март (2) → квартал 1
  • Апрель (3) — июнь (5) → квартал 2
  • Июль (6) — сентябрь (8) → квартал 3
  • Октябрь (9) — декабрь (11) → квартал 4

Внутренне 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);

Особенности работы quarter()

  • Возвращаемое значение всегда от 1 до 4
  • Изменение квартала влияет на месяц даты
  • Поддерживается форматирование через Q
  • Совместим с startOf() и endOf()
  • Основан на стандартном календарном делении года