Funktion lässt sich nur einmal ausführen

Zero2000

Erfahrenes Mitglied
Hallo,

ich habe eine Funktion, welche ich zweimal ausführen lassen möchte.
Leider wird sie nur einmal ausgeführt und bricht danach das Script ab.
PHP:
$jahr = '2015';
$von1 = '2015-04-07';
$bis1 = '2015-04-14';
$von2 = '2015-04-22';
$bis2 = '2015-05-01';

function arbeitstage($von,$bis,$year)
{
// Feste Feiertage Sachsen-Anhalt
$feiertage[] = "0101"; // Neujahrstag
$feiertage[] = "0601"; // Heilige drei Könige
$feiertage[] = "0105"; // Tag der Arbeit
$feiertage[] = "0310"; // Tag der Deutschen Einheit
$feiertage[] = "3110"; // Reformationstag
$feiertage[] = "2512"; // Erster Weihnachtstag
$feiertage[] = "2612"; // Zweiter Weihnachtstag
// Bewegliche Feiertage berechnen
function get_easter_datetime($jahr) {
$days = easter_days($jahr);
return mktime(0, 0, 0, 3, 21+$days,$jahr);
}
$tage = 86400; //60 * 60 * 24
$ostersonntag = get_easter_datetime($jahr);
$feiertage[] = date("dm", $ostersonntag - 2 * $tage);  // Karfreitag
$feiertage[] = date("dm", $ostersonntag + 1 * $tage);  // Ostermontag
$feiertage[] = date("dm", $ostersonntag + 39 * $tage); // Himmelfahrt
$feiertage[] = date("dm", $ostersonntag + 50 * $tage); // Pfingstmontag

//Wochenenden des Jahres ausgeben
$prevTime = mktime(0,0,0, 1,1,$jahr);
$aWeekends = array ();

while(true)
{
  $prevTime = strtotime ('next saturday' , $prevTime);
  $prevYear = date ('Y' , $prevTime);
  if ($prevYear > $jahr) break;
   $aWeekends[] = date ('dm' , $prevTime);
   $aWeekends[] = date ('dm' , $prevTime + 3600 * 24);
}

// Array mit den gesamten Tagen aus von und bis bilden
$startdatum = strtotime($von);
$enddatum = strtotime($bis);
while ($startdatum <= $enddatum)
{
 $vonbis[] = date('dm', $startdatum);
 $startdatum += 24 * 60 * 60;
}
// neues array erstellen wo die wochenenden nicht mehr dabei sind
$cleanarraywe = array_diff($vonbis, $aWeekends);
// neues array erstellen wo die Feiertage nicht mehr dabei sind
$cleanarrayft = array_diff($cleanarraywe, $feiertage);

$tage = count($cleanarrayft);
return($tage);

}

echo 'Sollte 6 sein: '.arbeitstage($von1,$bis1,$jahr);
echo 'Sollte 7 sein: '.arbeitstage($von2,$bis2,$jahr);

Ich habe leider keine Ahnung wie ich die Sache angehen muss, bzw. wo der Fehler liegt.

LG
Maik
 
Hi,

Fehlermeldung beim zweiten Mal? Wo bricht es ab? Kannst du das debuggen / mit Logausgaben erweitern? Läuft es wesentlich länger als beim ersten Mal?

Grüsse,
BK
 
Hast Du die Fehlermeldungen überhaupt eingeschaltet? Diese liefern folgendes:

5.3.24 Notice: Undefined variable: jahr in D:\temp\_Webdesign\test.php on line 34 Notice: Undefined variable: jahr in D:\temp\_Webdesign\test.php on line 41 Notice: Undefined variable: jahr in D:\temp\_Webdesign\test.php on line 48 Sollte 6 sein: 6 Fatal error: Cannot redeclare get_easter_datetime() (previously declared in D:\temp\_Webdesign\test.php:29) in D:\temp\_Webdesign\test.php on line 29

In deiner Funktion heißt der Parameter $year.

http://php.net/manual/de/language.variables.scope.php
 
Das mit dem $year ist mir nach dem Posten auch aufgefallen, dass hatte ich schon geändert.
Ich habe nun das Error_Reporting eingeschaltet und die Funktion get_easter_datetime aus der Funktion Arbeitstage ausgelagert, nun klappt es.
DANKE!
 
Zurück