Skip to content

Business Days

Calculate business days (Monday through Friday). Saturday and Sunday are treated as weekends.

Check if a date is a business day:

daytime('2025-11-17').isBusinessDay()
// true (Monday)
daytime('2025-11-18').isBusinessDay()
// true (Tuesday)
daytime('2025-11-15').isBusinessDay()
// false (Saturday)
daytime('2025-11-16').isBusinessDay()
// false (Sunday)

Check if a date is a weekend:

daytime('2025-11-15').isWeekend()
// true (Saturday)
daytime('2025-11-16').isWeekend()
// true (Sunday)
daytime('2025-11-17').isWeekend()
// false (Monday)

Get the next business day. If the current date is a weekend, returns the following Monday:

const saturday = daytime('2025-11-15')
// Saturday
const nextBiz = saturday.nextBusinessDay()
console.log(nextBiz.format('YYYY-MM-DD dddd'))
// "2025-11-17 Monday"
const friday = daytime('2025-11-14')
// Friday
const monday = friday.nextBusinessDay()
console.log(monday.format('YYYY-MM-DD dddd'))
// "2025-11-17 Monday"

Get the previous business day. If the current date is a weekend, returns the previous Friday:

const monday = daytime('2025-11-17')
// Monday
const prevBiz = monday.prevBusinessDay()
console.log(prevBiz.format('YYYY-MM-DD dddd'))
// "2025-11-14 Friday"
const sunday = daytime('2025-11-16')
// Sunday
const friday = sunday.prevBusinessDay()
console.log(friday.format('YYYY-MM-DD dddd'))
// "2025-11-14 Friday"

Alias for prevBusinessDay():

const date = daytime('2025-11-17')
date.previousBusinessDay()
// Same as prevBusinessDay()

Count business days in a month:

const date = daytime('2025-11-15')
date.businessDaysInMonth()
// 20 (November 2025)

Count business days in a year:

const date = daytime('2025-01-01')
date.businessDaysInYear()
// 261 (2025)

Filter a collection of dates:

const month = daytime('2025-11-15')
const allDays = month.getDaysInMonth()
// Get only business days
const businessDays = allDays.filter(d => d.isBusinessDay())
console.log(businessDays.length)
// 20
// Get only weekends
const weekends = allDays.filter(d => d.isWeekend())
console.log(weekends.length)
// 10
function getDeadline(startDate: Daytime, businessDays: number): Daytime {
let current = startDate.clone()
let count = 0
while (count < businessDays) {
current = current.nextBusinessDay()
count++
}
return current
}
const start = daytime('2025-11-15')
const deadline = getDeadline(start, 5)
console.log(deadline.format('YYYY-MM-DD dddd'))
// "2025-11-21 Friday"
function countBusinessDays(start: Daytime, end: Daytime): number {
const days = []
let current = start.clone()
while (current.isSameOrBefore(end)) {
if (current.isBusinessDay()) {
days.push(current.clone())
}
current = current.add(1, 'day')
}
return days.length
}
const start = daytime('2025-11-01')
const end = daytime('2025-11-30')
const workingDays = countBusinessDays(start, end)
console.log(workingDays)
// 20
function getNextWorkDay(date: Daytime): Daytime {
if (date.isBusinessDay()) {
return date.clone()
}
return date.nextBusinessDay()
}
const weekend = daytime('2025-11-15')
const workDay = getNextWorkDay(weekend)
console.log(workDay.format('YYYY-MM-DD dddd'))
// "2025-11-17 Monday"
function getBusinessDayRange(start: Daytime, count: number): Daytime[] {
const days: Daytime[] = []
let current = start.clone()
if (!current.isBusinessDay()) {
current = current.nextBusinessDay()
}
for (let i = 0; i < count; i++) {
days.push(current.clone())
current = current.nextBusinessDay()
}
return days
}
const start = daytime('2025-11-15')
const workDays = getBusinessDayRange(start, 5)
workDays.forEach(day => {
console.log(day.format('YYYY-MM-DD dddd'))
})
// 2025-11-17 Monday
// 2025-11-18 Tuesday
// 2025-11-19 Wednesday
// 2025-11-20 Thursday
// 2025-11-21 Friday
const result = daytime('2025-11-15')
// Saturday
.nextBusinessDay()
// Monday
.add(1, 'week')
// Next Monday
.prevBusinessDay()
// Friday
.add(2, 'day')
// Sunday
.nextBusinessDay()
// Monday
.format('YYYY-MM-DD dddd')
console.log(result)
// "2025-11-24 Monday"
function getMonthBusinessCalendar(date: Daytime) {
const month = date.clone().startOf('month')
const days = month.getDaysInMonth()
return {
totalDays: days.length,
businessDays: days.filter(d => d.isBusinessDay()),
weekends: days.filter(d => d.isWeekend()),
firstBusinessDay: days.find(d => d.isBusinessDay()),
lastBusinessDay: [...days].reverse().find(d => d.isBusinessDay())
}
}
const calendar = getMonthBusinessCalendar(daytime('2025-11-15'))
console.log(`Total: ${calendar.totalDays}`)
// Total: 30
console.log(`Business: ${calendar.businessDays.length}`)
// Business: 20
console.log(`Weekends: ${calendar.weekends.length}`)
// Weekends: 10
console.log(`First: ${calendar.firstBusinessDay?.format('YYYY-MM-DD')}`)
// First: 2025-11-03
console.log(`Last: ${calendar.lastBusinessDay?.format('YYYY-MM-DD')}`)
// Last: 2025-11-28