В календарных вычислениях квартал представляет собой одну из четырёх
частей года, каждая из которых включает три месяца. В библиотеке Day.js
работа с кварталами реализуется через плагин quarterOfYear,
поскольку базовый пакет не включает эту функциональность.
Подключение выполняется явно:
import dayjs from 'dayjs'
import quarterOfYear from 'dayjs/plugin/quarterOfYear'
dayjs.extend(quarterOfYear)
После подключения становится доступен метод определения квартала:
dayjs('2026-05-22').quarter() // 2
Кварталы в Day.js нумеруются с 1 до 4:
Определение квартала основывается на месяце даты, при этом логика не зависит от локали.
Метод quarter() может использоваться не только для
чтения, но и для изменения даты:
dayjs('2026-05-22').quarter(1) // перевод в 1 квартал (январь 2026)
При изменении квартала сохраняется день месяца, если это возможно. В случае выхода за пределы допустимых значений месяца происходит автоматическая корректировка:
dayjs('2026-05-31').quarter(2)
// апрель–июнь; дата будет скорректирована, если апрель не имеет 31 дня
Работа с границами квартала осуществляется через startOf
и endOf:
dayjs('2026-05-22').startOf('quarter') // 2026-04-01 00:00:00
dayjs('2026-05-22').endOf('quarter') // 2026-06-30 23:59:59.999
Эти методы часто используются в аналитике и отчётности, где необходимо агрегировать данные по кварталам.
Для вывода квартала используется токен Q:
dayjs('2026-05-22').format('Q') // "2"
В сложных шаблонах форматирования квартал может комбинироваться с годом:
dayjs('2026-05-22').format('YYYY [Q]Q') // "2026 Q2"
Работа с неделями требует более тонкой настройки, поскольку существует несколько систем нумерации недель: стандартная (локальная) и ISO.
В Day.js поддержка недель реализуется через два основных плагина:
weekOfYear — локальная нумерация недельisoWeek — ISO 8601 стандартПодключение:
import weekOfYear from 'dayjs/plugin/weekOfYear'
dayjs.extend(weekOfYear)
После этого становится доступен метод:
dayjs('2026-01-01').week() // номер недели
Локальная неделя зависит от настроек первого дня недели в текущей локали. В разных странах неделя может начинаться с воскресенья или понедельника, что влияет на результат вычислений.
ISO-нумерация строго определяет:
Подключение:
import isoWeek from 'dayjs/plugin/isoWeek'
dayjs.extend(isoWeek)
Использование:
dayjs('2026-01-01').isoWeek() // ISO-неделя
Дополнительно доступны методы:
dayjs('2026-01-01').startOf('isoWeek')
dayjs('2026-01-01').endOf('isoWeek')
Ключевое различие заключается в правилах формирования первой недели года:
| Тип недели | Начало недели | Первая неделя года |
|---|---|---|
| week | зависит от локали | локальное правило |
| isoWeek | понедельник | неделя с первым четвергом |
Это различие приводит к тому, что одна и та же дата может принадлежать разным неделям в разных системах:
dayjs('2026-01-01').week() // например, 0 или 1
dayjs('2026-01-01').isoWeek() // может быть 53 предыдущего года или 1
Обе системы поддерживают изменение недели:
dayjs('2026-05-22').week(10)
dayjs('2026-05-22').isoWeek(10)
При установке недели происходит пересчёт даты относительно начала соответствующей системы.
Получение начала и конца недели:
dayjs('2026-05-22').startOf('week')
dayjs('2026-05-22').endOf('week')
Для ISO:
dayjs('2026-05-22').startOf('isoWeek')
dayjs('2026-05-22').endOf('isoWeek')
Возвращаемые значения критически важны для построения недельных отчётов, таймлайнов и календарных сеток.
Day.js не предоставляет отдельного стандартного токена для недели года в базовом формате, поэтому для отображения обычно используется вычисленное значение:
const weekNumber = dayjs('2026-05-22').isoWeek()
Далее значение может быть встроено в строку вручную:
`2026-W${weekNumber}`
При работе с неделями и кварталами необходимо учитывать:
Эти факторы напрямую влияют на консистентность календарных расчётов, особенно в системах аналитики, планирования и финансового учёта.