Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Liczba dni roboczych, Funkcja, PHP 4 i 5
nospor
post 18.04.2005, 08:07:01
Post #1





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Napisałem funkcję do wyliczania liczby dni roboczych (bez sobót, niedziel oraz świąt) między dwoma datami:
  1. <?php
  2. function _workDays($date1, $date2)
  3. {
  4.     //święta w postaci mm-dd, pominąłem Wielkanoc i Boże Ciało, gdyż są to święta ruchome
  5.     $hol=array('01-01','05-01','05-03','08-15','11-11','12-25','12-26');
  6.  
  7.     $date1=strtotime($date1);$date2=strtotime($date2);
  8.     if ($date2===$date1) return 0;
  9.     $znak=1;//określa czy to będzie minus (gdy date1>date2) czy plus 
  10.     if ($date1>$date2)// minusy
  11.         {$datePom=$date1;$date1=$date2;$date2=$datePom;$znak=-1;}
  12.     $ilosc=0;
  13.     $date1=strtotime('+1 day',$date1);
  14.     $date2=strtotime('+1 day',$date2);
  15.     while ($date1<$date2)
  16.     {
  17.         $weekDay=date('w',$date1);
  18.         if (!($weekDay==|| $weekDay==|| in_array(date('m-d',$date1),$hol)))
  19.             $ilosc++;
  20.         $date1=strtotime('+1 day',$date1);
  21.     }
  22.     $ilosc*=$znak;
  23.     return $ilosc;
  24. }
  25.  
  26. ?>

wywołanie: echo _workDays('2005-04-11','2005-04-20');
Z założenia pierwsza data ma być miejsza od drugiej, w innym przypadku wynik będzie ujemny (mi to rozwiązanie było potrzebne, więc tak jest. Jak ktoś chce zawsze wynik dodatni, to usunąć linijkę $ilość*=$znak i wcześniej wszystko co dotyczyło zmiennej $znak).
Do liczby dni początkowa data nie jest liczona, czyli
echo _workDays('2005-04-18','2005-04-19');
zwróci 1.

Mam nadzieję że komuś się przyda smile.gif

edit:
Pełna funkcja z uwzględniem świąt ruchomych znajduje się tu:
http://nospor.pl/liczba-dni-roboczych-n23.html

Ten post edytował nospor 10.10.2007, 15:10:56


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 11:10