1
0
-1

Hi,

i working on calculate the different days between two dates which exclude public holiday and weekend.

Here is the code. But its not working. I am not sure which part i missed, the different day not display on the field. It should display 3 days.  Also I attach the example app for your reference. 

EXAMPLE APP

APP_calculate_date-1-20210913123836.jwa



<script type="text/javascript">


$(document).ready(function(){
{
var d1 = $('input[name="d1"]').val();
var d2 = $('input[name="d2"]').val();
$('input[name="diff_days"]').val(workingDaysBetweenDates(d1,d2));
});


let workingDaysBetweenDates = (d0, d1) => {
/* Two working days and an sunday (not working day) */
var holidays = ['2021-09-16', '2021-09-17'];
var startDate = parseDate(d0);
var endDate = parseDate(d1);

// Validate input
if (endDate <= startDate) {
return 0;
}

// Calculate days between dates
var millisecondsPerDay = 86400 * 1000; // Day in milliseconds
startDate.setHours(0, 0, 0, 1); // Start just after midnight
endDate.setHours(23, 59, 59, 999); // End just before midnight
var diff = endDate - startDate; // Milliseconds between datetime objects
var days = Math.ceil(diff / millisecondsPerDay);

// Subtract two weekend days for every week in between
var weeks = Math.floor(days / 7);
days -= weeks * 2;

// Handle special cases
var startDay = startDate.getDay();
var endDay = endDate.getDay();

// Remove weekend not previously removed.
if (startDay - endDay > 1) {
days -= 2;
}
// Remove start day if span starts on Sunday but ends before Saturday
if (startDay == 0 && endDay != 6) {
days--;
}
// Remove end day if span ends on Saturday but starts after Sunday
if (endDay == 6 && startDay != 0) {
days--;
}
/* Here is the code */
holidays.forEach(day => {
if ((day >= d0) && (day <= d1)) {
/* If it is not saturday (6) or sunday (0), substract it */
if ((parseDate(day).getDay() % 6) != 0) {
days--;
}
}
});
return days;
}

function parseDate(input) {
// Transform date from text to date
var parts = input.match(/(\d+)/g);
// new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}


</script>


Thanks.

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      Maybe this guide will help you at Calculate Date Range

        CommentAdd your comment...