sprostowanie i rozwiązanie

A oto rozwiązanie:
<?php
if ((in_array(date('m-d',$date1),$hol) && $weekDay==6))
$count--;
?>
Mam nadzieję że komuś się przyda
Liczenie ile minęło dni między jedną datą a drugą to dość częsty "problem" piszących w php. Samo policzenie dni bez rozróżniania na dni robocze jest banalnie proste:
<?php
echo (strtotime('2005-03-30 GMT')-strtotime('2005-03-01 GMT'))/86400;
?>
Jednak wyliczenie dni roboczych to już większa sprawa. By ułatwić sobie i Wam życie, napisałem funkcję, która wylicza liczbę dni roboczych. Pierwotnie funkcja nie uwzględniała świąt ruchomych jednak użytkownik kajko84 dopisał do tego i święta ruchome. Ja to trochę zoptymalizowałem i mamy w pełni funkcjonalną funkcję do wyliczania liczby roboczych.
<?php
function workDays($date1, $date2, $withStartDay = false) {
$date1=strtotime($date1);
$date2=strtotime($date2);
if ($date2===$date1 && !$withStartDay) return 0;
$char=1;
if ($date1>$date2)
{$datePom=$date1;$date1=$date2;$date2=$datePom;$char=-1;}
$count=0;
if (!$withStartDay)
$date1=strtotime('+1 day',$date1);
$date2=strtotime('+1 day',$date2);
$lastYear = null;
$hol=array('01-01','05-01','05-03','08-15','11-01','11-11','12-25','12-26');
while ($date1<$date2) {
$year = date('Y', $date1);
if ($year !== $lastYear){
$lastYear = $year;
$easter = date('m-d', easter_date($year));
$date = strtotime($year . '-' . $easter);
$easterSec = date('m-d', strtotime('+1 day', $date));
$cc = date('m-d', strtotime('+60 days', $date));
$hol[8] = $easter;
$hol[9] = $easterSec;
$hol[10] = $cc;
}
$weekDay=date('w',$date1);
$md = date('m-d',$date1);
if (!($weekDay==0 || $weekDay==6 || in_array($md,$hol) || $year>2010 && $md=='01-06')) {
$count++;
}
$date1=strtotime('+1 day',$date1);
}
$count*=$char;
return $count;
}
?>
,gdzie:
W przypadku, gdy data początkowo będzie większa od daty końcowej, dostaniemy wynik ujemny.
Użycie funkcji jest banalnie proste:
<?php
echo workDays('2007-10-10','2007-10-12'); //wyświetli 2
echo workDays('2007-10-10','2007-10-14'); //wyświetli 2, gdyż dwa ostanie dni to weekend
echo workDays('2007-10-12','2007-10-10'); //wyświetli -2
echo workDays('2007-10-10','2007-10-12',true);//wyświetli 3, gdyż liczymy z dniem początkowym
?>
Edit:
Na forum php pojawił się kod, który wylicza datę od danej po minięciu określonej liczby dni.
<?php
if ((in_array(date('m-d',$date1),$hol) && $weekDay==6))
$count--;
?>
$zs = date('m-d', strtotime('+49 days', $date));
$hol[11] = $zs;