- else {
- // (edit by Tokes to fix an edge case where the start day was a Sunday
- // and the end day was NOT a Saturday)
-
- // the day of the week for start is later than the day of the week for end
- if ($firstDayofWeek == 7) {
- // if the start date is a Sunday, then we definitely subtract 1 day
- $noOfRemainingDays--;
-
- if ($lastDayofWeek == 6) {
- // if the end date is a Saturday, then we subtract another day
- $noOfRemainingDays--;
- }
- }
- else {
- // the start date was a Saturday (or earlier), and the end date was (Mon..Fri)
- // so we skip an entire weekend and subtract 2 days
- $noOfRemainingDays -= 2;
- }
- }
-
- //T he no. of business days is: (number of weeks between the two dates) * (5 working days) + the remainder
- // ---->february in none leap years gave a remainder of 0 but still calculated weekends between first and last day, this is one way to fix it
- $workingDays = $noOfFullWeeks * 5;
- if ($noOfRemainingDays > 0 ) {
- $workingDays += $noOfRemainingDays;
- }
-
- // We subtract the holidays
- foreach($holidays as $holiday){
- $timeStamp = strtotime($holiday);
- // If the holiday doesn't fall in weekend
- // TODO: add handling for countries where they move non working day to first working day if holiday is on weekends
- if ($startDate <= $timeStamp && $timeStamp <= $endDate && date("N", $timeStamp) != 6 && date("N", $timeStamp ) != 7)
- $workingDays--;
- }
-
- return $workingDays;