Рабочие дни (business days) в JavaScript-календарях — это дни, исключающие выходные и, при необходимости, официальные праздничные даты. В прикладной разработке такие расчёты используются при планировании задач, расчёте сроков доставки, SLA, финансовых операций и расписаний.
В Day.js работа с рабочими днями реализуется через подключаемый модуль businessDays, который расширяет базовую функциональность библиотеки и добавляет методы для проверки и арифметики дат с учётом календаря рабочего времени.
Day.js по умолчанию не содержит логики рабочих дней. Для её включения используется плагин:
import dayjs from 'dayjs'
import businessDays from 'dayjs/plugin/businessDays'
dayjs.extend(businessDays)
После расширения экземпляры Day.js получают дополнительные методы, связанные с календарём рабочих дней.
Рабочие дни определяются на основе набора правил:
Day.js оперирует индексами дней недели:
Основной метод определения принадлежности даты к рабочим дням:
dayjs('2026-05-23').isBusinessDay()
Результат:
true — дата считается рабочейfalse — выходной или исключённый деньМетод учитывает текущую конфигурацию выходных, установленную в системе.
В реальных системах рабочие дни редко ограничиваются стандартной моделью «суббота-воскресенье». Day.js позволяет определить собственный набор выходных дней.
dayjs.setBusinessDays([6, 0])
В данном случае:
являются нерабочими днями.
При необходимости модель может быть изменена под локальные правила:
dayjs.setBusinessDays([5, 6]) // пятница и суббота выходные
Одна из ключевых операций — смещение даты с учётом только рабочих дней.
dayjs('2026-05-20').businessDaysAdd(5)
Поведение метода:
Пример логики:
Обратная операция выполняется аналогично:
dayjs('2026-05-20').businessDaysSubtract(3)
Метод:
В некоторых системах календарь может отличаться от классического:
Настройка:
dayjs.setBusinessDays([4, 5, 6])
Такая конфигурация автоматически влияет на:
isBusinessDay()businessDaysAdd()businessDaysSubtract()Базовый механизм Day.js ориентирован на выходные дни недели. Праздничные даты требуют дополнительной логики.
Часто используется комбинированный подход:
const holidays = [
'2026-01-01',
'2026-05-09'
]
function isHoliday(date) {
return holidays.includes(date.format('YYYY-MM-DD'))
}
Интеграция с рабочими днями:
function isWorkingDay(date) {
return date.isBusinessDay() && !isHoliday(date)
}
Такой подход позволяет расширять календарь без модификации внутренней логики плагина.
Day.js поддерживает цепочки вызовов, что удобно при календарных расчётах:
dayjs('2026-05-01')
.businessDaysAdd(10)
.businessDaysSubtract(2)
.format('YYYY-MM-DD')
Каждый шаг:
Все операции с датами создают новый объект. Это исключает побочные эффекты:
Результаты вычислений полностью зависят от:
Любое изменение конфигурации влияет на уже используемую логику.
const deadline = dayjs().businessDaysAdd(7)
const deliveryDate = dayjs(orderDate).businessDaysAdd(3)
const start = dayjs(eventDate).businessDaysSubtract(10)
if (dayjs(date).isBusinessDay()) {
// обработка рабочего дня
}
При использовании Day.js для бизнес-календарей следует учитывать:
Эти ограничения компенсируются внешними слоями бизнес-логики, которые накладываются поверх базового API.
Day.js оперирует локальными значениями даты. При работе с бизнес-днями важно учитывать:
dayjs.utc('2026-05-20').businessDaysAdd(5)
Модуль бизнес-дней часто используется совместно с:
utc — для унификации расчётовtimezone — для региональных графиковcustomParseFormat — для ввода дат из внешних
системКомбинация позволяет строить устойчивые календарные модели для сложных систем планирования.