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

Квартал в календарной системе представляет собой период из трёх месяцев, используемый для финансовой, аналитической и отчётной агрегации данных. В Day.js работа с кварталами реализуется через отдельный плагин, расширяющий базовый функционал библиотеки.

Подключение поддержки кварталов

Базовая сборка Day.js не включает методы работы с кварталами. Для их активации используется плагин quarterOfYear.

import dayjs from 'dayjs'
import quarterOfYear from 'dayjs/plugin/quarterOfYear'

dayjs.extend(quarterOfYear)

После подключения становятся доступными методы получения и установки квартала, а также использование единицы времени quarter в операциях округления дат.

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

После расширения функциональности экземпляр Day.js получает метод quarter(), возвращающий номер квартала текущей даты.

dayjs('2026-05-22').quarter() // 2
dayjs('2026-11-10').quarter() // 4

Календарное распределение кварталов:

  • 1 квартал: январь — март
  • 2 квартал: апрель — июнь
  • 3 квартал: июль — сентябрь
  • 4 квартал: октябрь — декабрь

Значение всегда находится в диапазоне от 1 до 4.

Установка квартала

Метод quarter() выполняет двойную роль: получение и изменение значения квартала. При передаче аргумента дата изменяется на соответствующий квартал.

dayjs('2026-01-15').quarter(3)

В результате дата будет перенесена в третий квартал, при этом сохраняются день и время, если они допустимы в новом диапазоне. Day.js автоматически корректирует значения, выходящие за пределы месяца.

Влияние установки квартала на дату

Изменение квартала не заменяет объект полностью, а пересчитывает месяц в пределах квартальной группы. Например:

dayjs('2026-02-10').quarter(4)

Февраль (1 квартал) будет преобразован в соответствующий месяц четвёртого квартала (октябрь–декабрь), при этом день месяца может быть скорректирован в зависимости от длины месяца.

Работа с началом и концом квартала

После подключения плагина становится доступной единица времени quarter в методах округления:

dayjs('2026-05-22').startOf('quarter')
dayjs('2026-05-22').endOf('quarter')

startOf('quarter') устанавливает дату на первый день первого месяца квартала в 00:00:00.000.

endOf('quarter') устанавливает дату на последний момент последнего дня третьего месяца квартала.

Такие операции широко применяются в агрегации финансовых периодов и построении отчётных интервалов.

Совместимость с другими единицами времени

Квартал логически связан с месяцами, но не влияет напрямую на недели или дни. При изменении квартала Day.js пересчитывает только месячную составляющую, оставляя остальную структуру даты неизменной, если это возможно.

Пример цепочки преобразований:

dayjs('2026-07-15')
  .quarter(1)
  .month() // пересчёт в январь–март диапазон

Граничные условия и особенности

При установке квартала следует учитывать несколько особенностей:

  • значение всегда нормализуется в диапазон 1–4
  • при выходе за диапазон применяется модульная логика или корректировка в пределах допустимых значений
  • день месяца может измениться, если новый месяц короче исходного
  • время суток не изменяется

Использование квартала в форматировании

Для отображения квартала используется токен Q в методе format():

dayjs('2026-05-22').format('Q')

Это позволяет интегрировать квартальную информацию в строки отчётов и аналитических представлений.

Квартал в вычислительных цепочках

Квартал часто применяется в комбинации с другими операциями Day.js:

dayjs()
  .quarter(2)
  .startOf('quarter')
  .add(10, 'day')

Такие цепочки используются для построения диапазонов выборки данных, особенно в аналитических системах, где требуется смещение относительно квартальной сетки.

Взаимодействие с временными зонами и датами

Квартальная логика не зависит от временных зон напрямую, однако итоговые даты могут изменяться при преобразованиях, связанных с локальным временем или UTC. При работе с UTC-режимом корректировка квартала выполняется в рамках универсального времени без привязки к локальным смещениям.

dayjs.utc('2026-05-22').quarter()

Поведение при сериализации

При преобразовании даты в строку или ISO-формат значение квартала не сохраняется как отдельное поле, так как является производной характеристикой. Оно восстанавливается только через вычисление на основе месяца.