moment-working-days

    0.1.8 • Public • Published

    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

    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.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

    Example 2

    > 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

    Example 3: Calculates working days from 29-11 till today

    > 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

    Example 4: Count all Fridays between 2 dates

    > 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

    isWorkingday(date) => boolean

    • returns if it is a working day, considering custom holidays and weekoffs

    Example 1: Custom Holiday

    > momentWorkingdays.isWorkingday("02-12-2019") // Monday
     
    > Output
    02-12-2019 is a Custom Holiday
     
    > Returns
    false

    Example 2: WeekOff

    > momentWorkingdays.isWorkingday("01-12-2019") // Sunday
     
    > Output
    01-12-2019 is a Sun
     
    > Returns
    false

    Example 3: Weekday

    > momentWorkingdays.isWorkingday("06-12-2019") // Friday
     
    > Returns
    true
     

    Example 4: Custom working day

    > momentWorkingdays.setCustomWorkingDays([
      '08-12-2019'
    ]).isWorkingday('08-12-2019')// Sunday
     
    > Returns
    true

    addWorkingDays(date, noOfDays) => Date string

    • returns date, after adding noOfDays of working days

    Example

    > 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

    nextWorkingDay(date) => Date string

    • returns next working date

    Example

    > momentWorkingdays.nextWorkingDay("06-12-2019") // Friday
     
    > Output
    07-12-2019 is a Sat
    08-12-2019 is a Sun
     
    > Returns
    09-12-2019 // Monday
     

    subtractWorkingDays(date, noOfDays) => Date string

    • returns date, after subtracting noOfDays of working days

    Example

    > 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

    prevWorkingDay(date) => Date string

    • returns previous working day

    Example

    > momentWorkingdays.prevWorkingDay("09-12-2019") // Monday
     
    > Output
    08-12-2019 is a Sun
    07-12-2019 is a Sat
     
    > Returns
    06-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.

    Install

    npm i moment-working-days

    DownloadsWeekly Downloads

    77

    Version

    0.1.8

    License

    ISC

    Unpacked Size

    1.07 MB

    Total Files

    38

    Last publish

    Collaborators

    • yatishbalaji