This is a Moment.js plugin that allows you to calculate working days, considering sequence of date(s). You can customize the week off days, and also declare custom dates for holidays (eg: public holidays) to exclude them from being counted as working day(s)
npm install --save moment-working-days
- Working Days calculator between Date range(s)
- TAT (Turn Around Time Calculator)
- Number of Fridays (or any other day) between Date range(s)
const WorkingDays = require('moment-working-days')
const momentWorkingdays = new WorkingDays({
includeToday: true, // optional. Default true
verbose: true, // optional. Default false
weekOffDays: [0, 6], // optional. Default [0, 6]
dateFormat: 'DD-MM-YYYY', // optional. Default 'YYYY-MM-DD'
customHolidays: ['02-12-2019'], // optional
customWorkingDays: [] // optional: eg ['07-12-2019']
})
// includeToday: Include today in calculations, else today wll be excluded
// weekOffDays: Defines weekoff days. Note that week starts with day 0 (Sunday) to day 6 (Saturday).
// dateFormat: Moment Date Format in which dates will be passed
// customHolidays: Defines custom holidays for bussiness (eg: public holidays). Pass an array of dates in configured dateFormat
- Documentation is available at moment-working-days Docs.
- calculates count of working days, considering custom holidays and weekoffs.
- supports distributed date ranges, i.e supports multiple date ranges to be considered for calculation
- Configure if we should consider today in calculation
- Configure Weekoffs
- Configure Public / custom holidays
- Configure ustom working days
- Support moment date formats
- Date pairing similiar to Start-Stop timer pairing
- If you pass only one date in array, it will calculate till today
- If you pass range of dates, it will calculate after making pair of even and odd indices
- Supports future dates
> momentWorkingdays.getWorkingDays([
"29-11-2019", "03-12-2019",
"07-12-2019", "12-12-2019"
])
> Output
30-11-2019 is a Sat
01-12-2019 is a Sun
02-12-2019 is a Custom Holiday
07-12-2019 is a Sat
08-12-2019 is a Sun
Working Days: 6 day(s)
> Returns
6
// Explanation
- First it creates pairs of odd and even indexed dates.
- Then, it calculates days within a pair (eg: pair1: 29-11 and 03-12. pair2: 07-12 and 12-12).
- Then, it calculates overall working days.
- Hence giving support to distributed date ranges
> momentWorkingdays.getWorkingDays([
"29-11-2019", "03-12-2019",
"07-12-2019"
])
> Output
30-11-2019 is a Sat
01-12-2019 is a Sun
02-12-2019 is a Custom Holiday
07-12-2019 is a Sat
08-12-2019 is a Sun
Working Days: 3 day(s)
> Returns
3
> Explanation
- If number of elements in input array is odd, then it will pair the last date with today
- Eg: pair1: 29-11 and 03-12. pair2: 07-12 and 09-12 (Todays date)
- Hence giving support to distributed date ranges
> momentWorkingdays.getWorkingDays([
"29-11-2019",
])
> Output
30-11-2019 is a Sat
01-12-2019 is a Sun
02-12-2019 is a Custom Holiday
07-12-2019 is a Sat
08-12-2019 is a Sun
Working Days: 6 day(s)
> Returns
6
> momentWorkingdays.setWeekOffDays([
0, 1, 2, 3, 4, 6
]).getWorkingDays(["05-12-2019", "12-12-2019"]))
> Output
05-12-2019 is a Thu
07-12-2019 is a Sat
08-12-2019 is a Sun
09-12-2019 is a Mon
10-12-2019 is a Tue
11-12-2019 is a Wed
12-12-2019 is a Thu
Working Days: 1 day(s)
> Returns
1
- returns if it is a working day, considering custom holidays and weekoffs
> momentWorkingdays.isWorkingday("02-12-2019") // Monday
> Output
02-12-2019 is a Custom Holiday
> Returns
false
> momentWorkingdays.isWorkingday("01-12-2019") // Sunday
> Output
01-12-2019 is a Sun
> Returns
false
> momentWorkingdays.isWorkingday("06-12-2019") // Friday
> Returns
true
> momentWorkingdays.setCustomWorkingDays([
'08-12-2019'
]).isWorkingday('08-12-2019')) // Sunday
> Returns
true
- returns date, after adding noOfDays of working days
> momentWorkingdays.addWorkingDays("06-12-2019", 2) // Friday
> Output
07-12-2019 is a Sat
08-12-2019 is a Sun
> Returns
10-12-2019 // Tuesday
- returns next working date
> momentWorkingdays.nextWorkingDay("06-12-2019") // Friday
> Output
07-12-2019 is a Sat
08-12-2019 is a Sun
> Returns
09-12-2019 // Monday
- returns date, after subtracting noOfDays of working days
> momentWorkingdays.subtractWorkingDays("09-12-2019", 2) // Monday
> Output
08-12-2019 is a Sun
07-12-2019 is a Sat
> Returns
05-12-2019 // Thursday
- returns previous working day
> momentWorkingdays.prevWorkingDay("09-12-2019") // Monday
> Output
08-12-2019 is a Sun
07-12-2019 is a Sat
> Returns
06-12-2019 // Friday
moment-working-days is copyright (c) 2019-present Yatish Balaji [email protected] and the contributors to moment-working-days.
moment-working-days is free software, licensed under the MIT License. See the
LICENSE
file for more details.