Last active
October 1, 2021 09:27
-
-
Save icemilo/a0b98a1508aab82853eb to your computer and use it in GitHub Desktop.
Calculates business days between two dates using moment.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var moment = require('moment'); | |
function calculateBusinessDays(firstDate, secondDate){ | |
//Initiallize variables | |
var day1 = moment(firstDate); | |
var day2 = moment(secondDate); | |
var adjust = 0; | |
if((day1.dayOfYear() === day2.dayOfYear()) && (day1.year() === day2.year())){ | |
return 0; | |
} | |
//Check if second date is before first date to switch | |
if(day2.isBefore(day1)){ | |
day2 = moment(firstDate); | |
day1 = moment(secondDate); | |
} | |
//Check if first date starts on weekends | |
if(day1.day() === 6) { //Saturday | |
//Move date to next week monday | |
day1.day(8); | |
} else if(day1.day() === 0) { //Sunday | |
//Move date to current week monday | |
day1.day(1); | |
} | |
//Check if second date starts on weekends | |
if(day2.day() === 6) { //Saturday | |
//Move date to current week friday | |
day2.day(5); | |
} else if(day2.day() === 0) { //Sunday | |
//Move date to previous week friday | |
day2.day(-2); | |
} | |
var day1Week = day1.week(); | |
var day2Week = day2.week(); | |
//Check if two dates are in different week of the year | |
if(day1Week !== day2Week){ | |
//Check if second date's year is different from first date's year | |
if (day2Week < day1Week){ | |
day2Week += day1Week; | |
} | |
//Calculate adjust value to be substracted from difference between two dates | |
adjust = -2 * (day2Week - day1Week); | |
} | |
return day2.diff(day1, 'days') + adjust; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Error when year is changed.
Eg: day1 = 1575381077000; Tuesday, December 3, 2019
day2= 1578059477000; Friday, January 3, 2020
response is 30; which is wrong