Prostřednictvím této nehezky designované funkce zjistíme počet pracovních dní v daném měsíci nebo počet pracovních dní zbývajících do konce měsíce 🙂
Zohledňujeme státní svátky, velikonoce i velký pátek…
<?php
echo workingDaysInThisMonth ( strtotime ( '2017-12-01' ) );
function workingDaysInThisMonth ( $date = false )
{
if ( !$date ) {
$date = time ();
}
$holidays = [
1 => [1 ],
5 => [1, 5 ],
7 => [5, 6 ],
9 => [28 ],
10 => [28 ],
11 => [17 ],
12 => [24, 25, 26 ]
];
$easter = date ( 'd.m.Y', strtotime ( date ( 'Y-m-d', easter_date ( date ( 'Y', $date ) ) ) . ' +1 days' ) );
$bigFriday = date ( 'd.m.Y', strtotime ( date ( 'Y-m-d', easter_date ( date ( 'Y', $date ) ) ) . ' previous friday' ) );
$holidays[ date ( 'n', strtotime ( $easter ) ) ][] = ( int ) date ( 'j', strtotime ( $easter ) );
$holidays[ date ( 'n', strtotime ( $bigFriday ) ) ][] = ( int ) date ( 'j', strtotime ( $bigFriday ) );
for ( $m = 1; $m <= 12; $m++ ) {
for ( $d = 1; $d <= date ( 't', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-01' ) ); $d++ ) {
if ( date ( 'w', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) == 0 ) {
$holidays[ date ( 'n', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) ][] = ( int ) date ( 'j', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) );
}
if ( date ( 'w', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) == 6 ) {
$holidays[ date ( 'n', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) ][] = ( int ) date ( 'j', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) );
}
}
}
$days = 0;
$tomorrow = date ( 'Y-m-d', strtotime ( '+1 day', $date ) );
$today = date ( 'Y-m-d', $date );
if ( date ( 'n', strtotime ( $tomorrow ) ) != date ( 'n', strtotime ( $today ) ) ) {
return $days;
}
for ( $d = date ( 'j', strtotime ( $tomorrow ) ); $d <= date ( 't', strtotime ( $tomorrow ) ); $d++ ) {
if ( !in_array ( $d, $holidays[ date ( 'n', strtotime ( $tomorrow ) ) ] ) ) {
$days++;
}
}
return $days;
}
Rubrika: Programování Štítky: Vložil: admin Datum: 16 května, 2017
Komentáře: 0