Skip to content

Instantly share code, notes, and snippets.

@parveen14
Created December 4, 2019 06:38
Show Gist options
  • Save parveen14/9b996e82745b87d71958cb1f09468e80 to your computer and use it in GitHub Desktop.
Save parveen14/9b996e82745b87d71958cb1f09468e80 to your computer and use it in GitHub Desktop.
Add Work Days And Hours in moment object
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