Working days calculator - Distributed date ranges
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)
Installation
npm install --save moment-working-days
Major Applications
- Working Days calculator between Date range(s)
- TAT (Turn Around Time Calculator)
- Number of Fridays (or any other day) between Date range(s)
Configuration
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
- Documentation is available at moment-working-days Docs.
API
getWorkingDays(array_of_dates) => number
- 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
Example 1
> momentWorkingdays > Output30-11-2019 is a Sat01-12-2019 is a Sun02-12-2019 is a Custom Holiday07-12-2019 is a Sat08-12-2019 is a SunWorking Days: 6 > Returns6 // Explanation- First it creates pairs of odd and even indexed dates- Then it calculates days within a - Then it calculates overall working days- Hence giving support to distributed date ranges
Example 2
> momentWorkingdays > Output30-11-2019 is a Sat01-12-2019 is a Sun02-12-2019 is a Custom Holiday07-12-2019 is a Sat08-12-2019 is a SunWorking Days: 3 > Returns3 > 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-- Hence giving support to distributed date ranges
Example 3: Calculates working days from 29-11 till today
> momentWorkingdays > Output30-11-2019 is a Sat01-12-2019 is a Sun02-12-2019 is a Custom Holiday07-12-2019 is a Sat08-12-2019 is a SunWorking Days: 6 > Returns6
Example 4: Count all Fridays between 2 dates
> momentWorkingdays) > Output05-12-2019 is a Thu07-12-2019 is a Sat08-12-2019 is a Sun09-12-2019 is a Mon10-12-2019 is a Tue11-12-2019 is a Wed12-12-2019 is a ThuWorking Days: 1 > Returns1
isWorkingday(date) => boolean
- returns if it is a working day, considering custom holidays and weekoffs
Example 1: Custom Holiday
> momentWorkingdays // Monday > Output02-12-2019 is a Custom Holiday > Returnsfalse
Example 2: WeekOff
> momentWorkingdays // Sunday > Output01-12-2019 is a Sun > Returnsfalse
Example 3: Weekday
> momentWorkingdays // Friday > Returnstrue
Example 4: Custom working day
> momentWorkingdays) // Sunday > Returnstrue
addWorkingDays(date, noOfDays) => Date string
- returns date, after adding noOfDays of working days
Example
> momentWorkingdays // Friday > Output07-12-2019 is a Sat08-12-2019 is a Sun > Returns10-12-2019 // Tuesday
nextWorkingDay(date) => Date string
- returns next working date
Example
> momentWorkingdays // Friday > Output07-12-2019 is a Sat08-12-2019 is a Sun > Returns09-12-2019 // Monday
subtractWorkingDays(date, noOfDays) => Date string
- returns date, after subtracting noOfDays of working days
Example
> momentWorkingdays // Monday > Output08-12-2019 is a Sun07-12-2019 is a Sat > Returns05-12-2019 // Thursday
prevWorkingDay(date) => Date string
- returns previous working day
Example
> momentWorkingdays // Monday > Output08-12-2019 is a Sun07-12-2019 is a Sat > Returns06-12-2019 // Friday
License
moment-working-days is copyright (c) 2019-present Yatish Balaji yatishmotamarri@yahoo.com 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.