Количество выходных и праздников на php

Количество выходных и праздников на php

Чтобы узнать количество выходных и праздников за заданный интервал времени на php, используйте данный код.

Чтобы выяснить количество рабочих дней с учетом праздников и выходных - суббота и воскресенье

<?php


function Count_Days_Without_Weekends($endDate,$startDate,$holidays){
$endDate = strtotime($endDate.' 00:00:00');
$startDate = strtotime($startDate.' 00:00:00');

$days = ($endDate - $startDate) / 86400 + 1;

$no_full_weeks = floor($days / 7);
$no_remaining_days = fmod($days, 7);

$the_first_day_of_week = date("N", $startDate);
$the_last_day_of_week = date("N", $endDate);

if ($the_first_day_of_week <= $the_last_day_of_week) {
if ($the_first_day_of_week <= 6 && 6 <= $the_last_day_of_week) $no_remaining_days--;
if ($the_first_day_of_week <= 7 && 7 <= $the_last_day_of_week) $no_remaining_days--;
}
else {
if ($the_first_day_of_week == 7) {
$no_remaining_days--;

if ($the_last_day_of_week == 6) {
$no_remaining_days--;
}
}
else {
$no_remaining_days -= 2;
}
}

$workingDays = $no_full_weeks * 5;
if ($no_remaining_days > 0 )
{
$workingDays += $no_remaining_days;
}

foreach($holidays as $holiday){
$time_stamp=strtotime($holiday);
if ($startDate <= $time_stamp && $time_stamp <= $endDate && date("N",$time_stamp) != 6 && date("N",$time_stamp) != 7)
$workingDays--;
}

return floor($workingDays);
}

Для этого выполните вызов функции:

//количество рабочих дней с учетом праздников и выходных - суббота и воскресенье

echo Count_Days_Without_Weekends(
'31.01.2023', //конец интервала
'01.01.2023', //начало интервала
[
'02.01.2023', //праздники:
'03.01.2023',
'04.01.2023',
'05.01.2023',
'06.01.2023',
]
);