Co potrafi funkcja:
- wylicza dzień pracujący w roku
- bierze pod uwagę dni ustawowo wolne od pracy
- bierze pod uwagę wolne dni weekendowe
- może uznawać soboty za dni pracujące
- może uznać podane dni za dodatkowe dni wolne
- może uznać podane dni za dodatkowe dni pracujące
- sprawdza czy dany dzień wolny (dodany lub ustawowy) nie pokrywa się z innym dniem wolnym od pracy (np. nie wypada w niedzielę) i bierze to pod uwagę
workingDayOfYear()
<?php { $freeHolidayDays = 0; $addWorkingDays = 0; $easterDay = easter_date($year); /* od aktualnego tygonia roku odejmujemy 1 bo aktualny tydzien nie jest jeszcze zakonczony */ $freeWeekendDays= $passedWeekends; /* funkcja date('W') liczy tygonie w roku rozpoczynajac od poniedzialku stad, jezeli 1 stycznia wypada w niedziele odejmujemy jeden tydzien jezeli wypada pozniej niz w poniedzialek, dodajemy jeden tydzien */ if($firstDayOfYear == 0) { $passedWeekends--; } else if ($firstDayOfYear > 1) { $passedWeekends++; } /* lista dni ustawowo wolnych od pracy wg. Ustawa z dnia 18 stycznia 1951 r. o dniach wolnych od pracy. (Dz.U. 1951 nr 4 poz. 28) z pozniejszymi zmianami isip.sejm.gov.pl/servlet/Search?todo=file&id=WDU19510040028&type=3&name=D9510028.pdf */ $easterDay, // pierwszy dzien wielkiej nocy $easterDay + 86400, // drugi dzien wielkiej nocy $easterDay + (60*86400), // boze cialo $easterDay + (49*86400), // zielone swiatki ); /* jezeli sobota jest dniem wolnym liczbe wolnych dni weekendowych mnozymy przez 2 (wczesniej ujete tylko wolne niedziele) */ if ($freeSaturdays) { $freeWeekendDays *= 2; } /* zsumowanie dodatkowych wolnych dni - przed data do ktorej liczymy - z pominieciem dni, ktore wypadly w weekend, wiec i tak sa wolne */ foreach ($freeDaysArray as $holidayTimeStamp) { /* pomijamy jezeli dzien swiateczny jest pozniej niz badana data */ if ($holidayTimeStamp > $timeStamp) { continue; } /* jezeli swieto nie wypada w dzien wolny od pracy jako dzien weekendowy dodajemy je do wolnych dni swiatecznych */ if ($holidayDayOfWeek == 0 || ($holidayDayOfWeek == 6 && $freeSaturdays)) { continue; } $freeHolidayDays++; } foreach($extraWorkingDays as $workingDayTimeStamp) { if ($workingDayTimeStamp > $timeStamp) { continue; } if ($workingDayOfWeek != 0 || ($workingDayOfWeek == 6 && !$freeSaturdays)) { continue; } $addWorkingDays++; } /* liczymy ktoru to dzien pracujacy w roku wolne dni weekendy - wolne dni swiateczne (-dodatkowe dni wolne) (+dodatkowe dni pracujace) */ $workingDay = $dayOfYear - $freeWeekendDays - $freeHolidayDays + $addWorkingDays; return $workingDay; } ?>
Przykłady
<?php // dzisiejsza data: 2007-01-31 $WorkingDayOfYear = WorkingDayOfYear(); /* dla dzisiejszej daty soboty wolne --> 22 dzien pracujacy */ /* dla dzisiejszej daty, soboty wolne, dodatkowy dzien wolny (2007-01-08) --> 21 dzien pracujacy */ /* dla dzisiejszej daty, soboty pracujace, dodatkowy dzien wolny(2007-01-08), dwa dodatkowe dni pracujace (2007-01-01, 2007-01-07) --> 26 dzien pracujacy */ ?>
Prawdopodobnie nikomu do niczego nie będzie to potrzebne, ale jeżeli okaże się inaczej - można używać do woli.
pozdr.