Функция getQuarter в библиотеке date-fns
используется для определения календарного квартала, к которому относится
переданная дата. Кварталы в данной системе нумеруются от 1 до 4 и
соответствуют стандартному делению года на четырёхмесячные периоды:
январь–март, апрель–июнь, июль–сентябрь, октябрь–декабрь.
Календарный год делится на четыре равные части:
Функция анализирует месяц даты и вычисляет принадлежность к одному из этих диапазонов. Логика основана на целочисленном делении номера месяца на 3 с последующим округлением вверх.
getQuarter(date)
Параметр date может быть:
DateВозвращаемое значение — целое число от 1 до 4.
import { getQuarter } from 'date-fns'
getQuarter(new Date(2024, 0, 15)) // 1
getQuarter(new Date(2024, 3, 10)) // 2
getQuarter(new Date(2024, 6, 1)) // 3
getQuarter(new Date(2024, 9, 30)) // 4
В примере используется нумерация месяцев JavaScript, где январь соответствует 0, а декабрь — 11.
Внутренняя формула определения квартала сводится к преобразованию номера месяца:
quarter = Math.floor(month / 3) + 1
где month — это значение от 0 до 11.
Таким образом:
Функция поддерживает несколько форматов входных данных, поскольку
внутри date-fns используется нормализация через
toDate.
getQuarter('2025-02-01') // 1
getQuarter(1706745600000) // 1 (timestamp)
getQuarter(new Date()) // зависит от текущей даты
Строковые значения интерпретируются через стандартный парсер
Date, поэтому корректность результата зависит от формата
строки.
Перед вычислением квартала дата приводится к валидному объекту времени. Если значение не может быть интерпретировано как корректная дата, возникает ошибка.
Важные моменты:
Invalid DateNaN или undefined не являются допустимыми
значениямиDate
внутри JavaScriptОпределение квартала используется в задачах, связанных с аналитикой, отчетностью и группировкой данных по периодам времени.
Пример группировки продаж:
const sales = [
{ date: new Date(2024, 0, 10), amount: 120 },
{ date: new Date(2024, 2, 5), amount: 200 },
{ date: new Date(2024, 5, 18), amount: 150 },
]
const grouped = sales.reduce((acc, item) => {
const q = getQuarter(item.date)
acc[q] = (acc[q] || 0) + item.amount
return acc
}, {})
console.log(grouped)
// { '1': 320, '2': 150 }
В бизнес-логике кварталы часто используются как стандартные отчетные периоды. Они позволяют:
Использование getQuarter упрощает привязку даты к
отчетному периоду без ручных вычислений.
Функция опирается на локальное время объекта Date. Это
означает, что при работе с разными часовыми поясами возможны различия в
определении даты перехода между кварталами.
getQuarter(new Date('2024-03-31T23:30:00Z'))
Результат может отличаться в зависимости от локальной зоны исполнения кода.
Операция вычисления квартала является константной по сложности
O(1) и не зависит от размера данных или внешних источников.
Функция не выполняет сложных преобразований, кроме извлечения месяца и
арифметического расчета.
На практике встречаются следующие проблемы:
getQuarter часто используется вместе с функциями:
startOfQuarter — начало кварталаendOfQuarter — конец кварталаdifferenceInQuarters — разница между кварталамиaddQuarters — прибавление кварталов к датеКомбинация этих функций позволяет строить полноценную работу с квартальными периодами без ручных вычислений.