Skrypt do sprawdzania dni roboczych
Rozwijając swój firmowy CRM napotkaliśmy na ciekawy problem. W jaki sposób sprawdzić, czy aktualny dzień jest dniem pracującym, czy wolnym od pracy? W tym wpisie pokażę jak rozwiązać ten problem.
Dni wolne od pracy
Zgodnie z obowiązującymi przepisami aktualnie jest 13 świąt wolnych od pracy (pełna lista na 2015 rok do sprawdzenia tutaj).Do tego dochodzą soboty i niedziele.
Zdecydowana większość świat ma stałe daty, ale mamy 3 święta ruchome:
- Wielkanoc
- Poniedziałek Wielkanocny
- Boże Ciało
Boże Ciało jest 60 dni po Wielkanocy. Żeby znać wszystkie daty świąt wystarczy poznać datę Wielkanocy w danym roku. Do tego PHP posiada wbudowaną funkcję easter_date().
Funkcja PHP
Mając teoretyczną wiedzę na temat dni wolnych napisanie funkcji PHP jest już proste :)
<?php /** * Funkcja sprawdza czy podana data jest dniem pracującym (TRUE) lub święto/sobota/niedziele (FALSE) * * @param string $date Data w formacie Y-m-d (np. 2015-08-26) * @return boolean */ function isThatDateWorkingDay($date) { $time = strtotime($date); $dayOfWeek = (int)date('w',$time); $year = (int)date('Y',$time); #sprawdzenie czy to nie weekend if( $dayOfWeek==6 || $dayOfWeek==0 ) { return false; } #lista swiat stalych $holiday=array('01-01', '01-06','05-01','05-03','08-15','11-01','11-11','12-25','12-26'); #dodanie listy swiat ruchomych #wialkanoc $easter = date('m-d', easter_date( $year )); #poniedzialek wielkanocny $easterSec = date('m-d', strtotime('+1 day', strtotime( $year . '-' . $easter) )); #boze cialo $cc = date('m-d', strtotime('+60 days', strtotime( $year . '-' . $easter) )); #Zesłanie Ducha Świętego $p = date('m-d', strtotime('+49 days', strtotime( $year . '-' . $easter) )); $holiday[] = $easter; $holiday[] = $easterSec; $holiday[] = $cc; $holiday[] = $p; $md = date('m-d',strtotime($date)); if(in_array($md, $holiday)) return false; return true; } ?>