Created
December 4, 2019 06:38
-
-
Save parveen14/9b996e82745b87d71958cb1f09468e80 to your computer and use it in GitHub Desktop.
Add Work Days And Hours in moment object
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
const moment = require('moment'); | |
moment.fn.addWorkdays = function addWorkdays(days) { | |
// Getting negative / positive increment | |
const increment = days / Math.abs(days); | |
// Looping weeks for each full 5 workdays | |
const date = this.clone().add(Math.floor(Math.abs(days) / 5) * 7 * increment, 'days'); | |
// Account for starting on Saturdays and Sundays | |
if (date.isoWeekday() === 6) { date.add(-increment, 'days'); } | |
else if (date.isoWeekday() === 7) { date.add(-2 * increment, 'days'); } | |
// Adding / removing remaining days in a short loop, jumping over weekends | |
let remaining = days % 5; | |
while (remaining !== 0) { | |
date.add(increment, 'days'); | |
if (date.isoWeekday() !== 6 && date.isoWeekday() !== 7) | |
remaining -= increment; | |
} | |
return date; | |
}; | |
const addWorkHoursDays = ({ value, unit = 'days'}) => { | |
let days = 0; | |
let remainingHours = 0; | |
if (unit === 'hours') { | |
days = Math.floor(Math.abs(value / 24)); | |
remainingHours = value % 24; | |
} else { | |
days = value; | |
} | |
// moment().addWorkdays - this method add days in moment passed | |
const lastWorkDay = moment().addWorkdays(days); // return momentObject | |
// Add Remaining hours in return moment object | |
if (remainingHours) { | |
lastWorkDay.add(remainingHours, 'hours'); | |
} | |
// check after its saturday or sunday after adding hours, if yes then add more days in it | |
if (lastWorkDay.isoWeekday() === 6) { | |
lastWorkDay.add(2, 'days'); | |
} | |
if (lastWorkDay.isoWeekday() === 7) { | |
lastWorkDay.add(7, 'days'); | |
} | |
return lastWorkDay; // return moment | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment