Feiertage ermitteln mit PHP-Funktion - brauche dringend Hilfe
Hallo,
ich habe vor einigen Jahren eine mit PHP realisierte Anwesenheitsliste von meinem Vorgänger übernommen. Mir ist nun aufgefallen, dass die beweglichen Feiertage wie Ostern und Pfingsten nicht mehr entsprechend in der eingebauten Kalenderfunktion angezeigt werden, die festen Feiertage funktionieren. Ich habe leider nicht das erforderliche Know-How um hier Korrekturen vorzunehmen und hoffe jemand von euch kann mir hier helfen.
Die entsprechende Funktion scheine ich gefunden zu haben:
Kann mir hier jemand aus der Ferne helfen? Ich bin mit meinem Latein am Ende
Viele Grüße
Erik
ich habe vor einigen Jahren eine mit PHP realisierte Anwesenheitsliste von meinem Vorgänger übernommen. Mir ist nun aufgefallen, dass die beweglichen Feiertage wie Ostern und Pfingsten nicht mehr entsprechend in der eingebauten Kalenderfunktion angezeigt werden, die festen Feiertage funktionieren. Ich habe leider nicht das erforderliche Know-How um hier Korrekturen vorzunehmen und hoffe jemand von euch kann mir hier helfen.
Die entsprechende Funktion scheine ich gefunden zu haben:
<?php
function feiertag ($jahr,$monat,$tag,$wtag,$today) {
// Feiertage BERLIN !!!!!!!!!!!!!!!!!
// ==================================
// regelmäßige Feiertage
$IsFt = 0;
switch ($monat) {
case 1:
$IsFt = ($tag == 1);
break;
// case 2:
// case 3:
// case 4:
case 5:
$IsFt = ($tag == 1);
break;
// case 6:
// case 7:
// case 8:
// case 9:
case 10:
$IsFt = ($tag == 3);
break;
// case 11:
case 12:
$IsFt = ($tag == 25) || ($tag == 26);
break;
}
if (!$IsFt // ist schon Feiertag
&& ($wtag != 3) // Dienstag und Mittwoch entfällt
&& ($wtag != 4)
&& (3 <= $monat) // relevante Monate für BERLIN
&& ($monat <= 6) // ======
&& (2000 <= $jahr) // Güligkeit der Ostertabelle
&& ($jahr <= 2035)
) {
// http://www.ibiblio.org/ais/osterndt.htm
// Beginnt mit 2000 und endet mit 2035. Das sollte ausreichend sein.
$ListeOstern =array('04-23',
'04-15','03-31','04-20','04-11','03-27',
'04-16','04-08','03-23','04-12','04-04',
'04-24','04-08','03-31','04-20','04-05',
'03-27','04-16','04-01','04-21','04-12',
'04-04','04-17','04-09','03-31','04-20',
'04-05','03-28','04-16','04-01','04-21',
'04-13','03-28','04-17','04-09','03-25');
$ostern = $ListeOstern[$jahr - 2000];
$om = substr($ostern,0,2);
$od = substr($ostern,3,2);
$ostern = mktime(0,0,0,$om,$od,$jahr,0);
// Karfreitag
$IsFt = $ostern-2*86400+3600 == $today; //20161026 SB: +3600 wegen der Umstellung von Sommerzeit auf Winterzeit hinzugefügt
if ($IsFt) return($IsFt);
// Ostermontag
$IsFt = $ostern+1*86400+3600 == $today; //20161026 SB: +3600 wegen der Umstellung von Sommerzeit auf Winterzeit hinzugefügt
if ($IsFt) return($IsFt);
// Pfingstmontag
$IsFt = $ostern+(7*7+1)*86400+3600 == $today; //20161026: +3600 wegen der Umstellung von Sommerzeit auf Winterzeit hinzugefügt
if ($IsFt) return($IsFt);
// Himmelfahrt
$IsFt = $ostern+(5*7+4)*86400+3600 == $today; //20161026: +3600 wegen der Umstellung von Sommerzeit auf Winterzeit hinzugefügt
if ($IsFt) return($IsFt);
}
return($IsFt); }
Kann mir hier jemand aus der Ferne helfen? Ich bin mit meinem Latein am Ende
Viele Grüße
Erik
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 371405
Url: https://administrator.de/contentid/371405
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
16 Kommentare
Neuester Kommentar
Hallo Erik,
1. als Code definieren
2. Kommentare als solche hinterlegen
hilft um das ganze klarer zu halten.
Daneben empfiehlt es sich im Internet hierfür APIs anzuschauen - auf die schnelle gefunden: https://ipty.de/feiertag/ und damit weiter zu arbeiten.
VG
1. als Code definieren
2. Kommentare als solche hinterlegen
hilft um das ganze klarer zu halten.
Daneben empfiehlt es sich im Internet hierfür APIs anzuschauen - auf die schnelle gefunden: https://ipty.de/feiertag/ und damit weiter zu arbeiten.
VG
Moin
Ich finde auf den ersten Blick keinen Fehler im Script. Das wundert mich auch irgendwie nicht, wenn es ja bisher funktioniert hat. Allerdings habe ich den Verdacht, dass aus irgendeinem Grund das Jahr nicht (mehr) korrekt an die Funktion übergeben wird und deshalb die Ermittlung von Ostern fehlschlägt. Alle anderen nicht festen Feiertage sind von Ostern abhängig und werden daher auch nicht ermittelt.
Kannst du in der Funktion mal ganz oben in Zeile 3 einfach ein
einbauen und dann sagen was dabei als Jahr angezeigt wird?
Manuel
Ich finde auf den ersten Blick keinen Fehler im Script. Das wundert mich auch irgendwie nicht, wenn es ja bisher funktioniert hat. Allerdings habe ich den Verdacht, dass aus irgendeinem Grund das Jahr nicht (mehr) korrekt an die Funktion übergeben wird und deshalb die Ermittlung von Ostern fehlschlägt. Alle anderen nicht festen Feiertage sind von Ostern abhängig und werden daher auch nicht ermittelt.
Kannst du in der Funktion mal ganz oben in Zeile 3 einfach ein
echo "angegebenes Jahr: ".$jahr;
Manuel
z.B. so
Gruß m.
<?php
$datum = "25.12.2018";
$result = file_get_contents("https://ipty.de/feiertag/api.php?do=isFeiertagInfo&datum=$datum&loc=BW,BY,BE,BB,HB,HH,HE,MV,NI,NW,RP,SL,SN,ST,SH,TH&outformat=d.m.Y");
$obj = json_decode($result);
if ($obj->isFeiertag == 1){
echo "Der '$datum' ist ein Feiertag! Ab an den Strand :-).";
}else{
echo "Kein Feiertag :-(";
}
?>
Hallo Erik,
seit wann geht es denn nicht mehr?
Was mich irritiert ist, dass bei der Berechnung der beweglichen Feiertage 3600 Sekunden (also eine Stunde) addiert werden. Jetzt weiß ich natürlich nicht, was in $today übergeben wird, aber ist das wirklich heute 1:00:00 Uhr und nicht einfach das heutige Datum (also ohne Uhrzeit)?
Gruß vom
WinCobold
seit wann geht es denn nicht mehr?
Was mich irritiert ist, dass bei der Berechnung der beweglichen Feiertage 3600 Sekunden (also eine Stunde) addiert werden. Jetzt weiß ich natürlich nicht, was in $today übergeben wird, aber ist das wirklich heute 1:00:00 Uhr und nicht einfach das heutige Datum (also ohne Uhrzeit)?
Gruß vom
WinCobold
Hallo Erix83,
den Vorschlag von Manuel aufgreifend:
Der Funktion werden noch mehr Parameter übergeben:
Lass doch einmal Alle ausgeben indem Du, wie zuvor, Code in Zeile 3 einfügst
und die resultierende Ausgabe hier postet.
Gruß Frank
den Vorschlag von Manuel aufgreifend:
Der Funktion werden noch mehr Parameter übergeben:
function feiertag ($jahr,$monat,$tag,$wtag,$today)
Lass doch einmal Alle ausgeben indem Du, wie zuvor, Code in Zeile 3 einfügst
<?php
function feiertag ($jahr,$monat,$tag,$wtag,$today) {
echo "****************<br>\n";
echo "Jahr: ".$jahr."<br>\n";
echo "Monat: ".$monat."<br>\n";
echo "Tag: ".$tag."<br>\n";
echo "Wochentag: ".$wtag."<br>\n";
echo "Heute: ".$today."<br>\n";
echo "****************<br>\n";
und die resultierende Ausgabe hier postet.
Gruß Frank
Hallo Erik,
danke für die Ausgabe.
Das ist zusammengebastelt heute, der 17.04.2018
Das ist schon mal gut.
Heute ist Dienstag, also für php der Wochentag 2
0 (für Sonntag) bis 6 (für Samstag)
Übergeben wird aber die 3, also eigentllich Mittwoch.
Das ist merkwürdig oder zumindest unerwartet.
Das ist eine Zeitangabe in Unixzeit.
Umgerechnet ist das der 16.04.2018 um 23:00 UTC
also gestern kurz vor Tagesende.
In unserer Zeitzone war es dann aber schon
17.04.2018 um 01:00 MESZ
also heut morgen 1 Uhr.
Im Moment habe ich leider keine Zeit mir den Code diesbezüglich anzusehen.
Eins will ich dennoch schon anmerken:
Da nicht genau bekannt ist woher die Daten an die Funktion übergeben werden, würde ich die Feiertagsberechnung lediglich anhand des übergebenen Datums vornehmen.
17.04.2018
Welcher Wochentag das ist lässt sich daraus leicht ermitteln und die Uhrzeit ist nicht relevant.
Sehe ich das richtig, dass es um die Feiertage des Bundeslandes Berlin geht?
Gruß Frank
danke für die Ausgabe.
Jahr: 2018Monat: 4Tag: 17
Das ist zusammengebastelt heute, der 17.04.2018
Das ist schon mal gut.
Wochentag: 3
Heute ist Dienstag, also für php der Wochentag 2
0 (für Sonntag) bis 6 (für Samstag)
Übergeben wird aber die 3, also eigentllich Mittwoch.
Das ist merkwürdig oder zumindest unerwartet.
Heute: 1523919600
Das ist eine Zeitangabe in Unixzeit.
Umgerechnet ist das der 16.04.2018 um 23:00 UTC
also gestern kurz vor Tagesende.
In unserer Zeitzone war es dann aber schon
17.04.2018 um 01:00 MESZ
also heut morgen 1 Uhr.
Im Moment habe ich leider keine Zeit mir den Code diesbezüglich anzusehen.
Eins will ich dennoch schon anmerken:
Da nicht genau bekannt ist woher die Daten an die Funktion übergeben werden, würde ich die Feiertagsberechnung lediglich anhand des übergebenen Datums vornehmen.
17.04.2018
Welcher Wochentag das ist lässt sich daraus leicht ermitteln und die Uhrzeit ist nicht relevant.
$wtag
und $today
würde ich komplett ignorieren oder durch die Funktion selbst neu ermitteln lassen.Sehe ich das richtig, dass es um die Feiertage des Bundeslandes Berlin geht?
Gruß Frank
Hallo Erik,
den Code habe ich jetzt etwas modifiziert, Kommentare teils geändert und weitere Kommentaren hinzugefügt.
Einerseits, damit er von Sommer-/Winterzeit unabhängig ist
andererseits, damit er leichter nachvollziehbar und leichter anpassbarer ist.
Für's Produktive müssen die echo-Zeilen auskommentiert oder gelöscht werden.
Desgleichen gilt für den Test-Block am Anfang.
Die übergebenen Variablen
und statt derer
Wichtig
In Zeile 60 + 61 gilt es noch zu prüfen ob Dienstag = 2 ist und Mittwoch = 3 ist.
(Gemäß meines Kommentares in Zeile 56.)
Die Zeilen 60 - 63 scheinen aber ohnehin nur dazusein, um das Skript zu beschleunigen, also abzubrechen wenn Nachfolgendes nicht mehr relevant sein kann. Man könnte sie daher auch auskommentieren, aber sinnlos sind sie nicht.
Anmerkung
Falls ich einen Fehler eingebaut habe und die Blegschaft deswegen irgendwann nicht zum Dienst erscheint, dann ist das ein von Euch gewollter Sonderurlaub.
Gruß Frank
den Code habe ich jetzt etwas modifiziert, Kommentare teils geändert und weitere Kommentaren hinzugefügt.
Einerseits, damit er von Sommer-/Winterzeit unabhängig ist
andererseits, damit er leichter nachvollziehbar und leichter anpassbarer ist.
Für's Produktive müssen die echo-Zeilen auskommentiert oder gelöscht werden.
Desgleichen gilt für den Test-Block am Anfang.
Die übergebenen Variablen
$wtag
und $today
habe ich ignoriertund statt derer
$wochentag
und $heute
hinzugefügt.Wichtig
In Zeile 60 + 61 gilt es noch zu prüfen ob Dienstag = 2 ist und Mittwoch = 3 ist.
(Gemäß meines Kommentares in Zeile 56.)
Die Zeilen 60 - 63 scheinen aber ohnehin nur dazusein, um das Skript zu beschleunigen, also abzubrechen wenn Nachfolgendes nicht mehr relevant sein kann. Man könnte sie daher auch auskommentieren, aber sinnlos sind sie nicht.
<?php
// *************************************************************************
// Diese Block ist nur zum Testen und dabei manuell Werte vorgeben zu können
$j = 2018;
$m = 5;
$t = 10;
$wt = 0;
$td = 0;
$ergebnis = feiertag($j, $m, $t, $wt, $td); // Hier wird manuell die Funktion aufgerufen
if ($ergebnis) {echo "Ergebnis: Heute ist Feiertag.<br>\n";} // Ausgabe bei Feiertag
else {echo "Ergebnis: Heute ist kein Feiertag.<br>\n";}; // oder eben kein Feiertag
// Hier endet der Testblock
// ************************
function feiertag ($jahr,$monat,$tag,$wtag,$today) {
echo "jahr: ".$jahr."<br>\n";
echo "monat: ".$monat."<br>\n";
echo "tag: ".$tag."<br>\n";
echo "wtag: ".$wtag."<br>\n";
echo "today: ".$today."<br>\n";
$IsFt = false; // erst Mal vom schlechtesten ausgehen
// Feiertage BERLIN !!!!!!!!!!!!!!!!!
// ==================================
// unbewegliche Feiertage
switch ($monat) {
case 1:
$IsFt = ($tag == 1); // true bei Neujahr
break;
// case 2:
// case 3:
// case 4:
case 5:
$IsFt = ($tag == 1); // true bei Maifeiertag
break;
// case 6:
// case 7:
// case 8:
// case 9:
case 10:
$IsFt = ($tag == 3); // true bei Tag der deutschen Einheit
break;
// case 11:
case 12:
$IsFt = ($tag == 25) || ($tag == 26); // true bei 1. oder 2 . Weihnachtstag
break;
};
if ($IsFt) return(true); // es ist ein unbeweglicher Feiertag
$heute = mktime(12, 0, 0, $monat, $tag, $jahr); // = timestamp um 12 Uhr am gegebenen Datum
$wochentag = date('w', $heute); // = 0-6 (Sonntag-Samstag)
echo "Wochentag: ".$wochentag."<br>\n";
//if ($wochentag == 2) return(false); // Dienstags gibt es keine beweglichen Feiertage in Berlin
if ($wochentag == 3) return(false); // Mittwochs gibt es keine beweglichen Feiertage in Berlin
if ($monat < 3) return(false); // für Berlin keine beweglichen Feriertage vor März
if ($monat > 6) return(false); // für Berlin keine beweglichen Feriertage nach Juni
if ($jahr < 2000) return(false); // Vor Güligkeit der Ostertabelle
if ($jahr > 2035) return(false); // Nach Güligkeit der Ostertabelle
// http://www.ibiblio.org/ais/osterndt.htm
// Beginnt mit 2000 und endet mit 2035. Das sollte ausreichend sein.
$ListeOstern = array('04-23',
'04-15','03-31','04-20','04-11','03-27',
'04-16','04-08','03-23','04-12','04-04',
'04-24','04-08','03-31','04-20','04-05',
'03-27','04-16','04-01','04-21','04-12',
'04-04','04-17','04-09','03-31','04-20',
'04-05','03-28','04-16','04-01','04-21',
'04-13','03-28','04-17','04-09','03-25');
$osterwertausarray = $ListeOstern[$jahr - 2000];
$om = substr($osterwertausarray, 0, 2);
$od = substr($osterwertausarray, 3, 2);
$ostern = mktime(12, 0, 0, $om, $od ,$jahr);
echo "Heute: ".date('d.m.Y H:i:s', $heute)." (".$heute.")<br>\n";
// Karfreitag
$karfreitag = mktime(12, 0, 0, $om, $od - 2 ,$jahr); // Ostern - 2 Tage
echo "Karfreitag: ".date('d.m.Y H:i:s', $karfreitag)." (".$karfreitag.")<br>\n";
if ($heute == $karfreitag) return(true);
// Ostersonntag
echo "Ostersonntag: ".date('d.m.Y H:i:s', $ostern)." (".$ostern.")<br>\n"; // Ostern
if ($heute == $ostern) return(true);
// Ostermontag
$ostermontag = mktime(12, 0, 0, $om, $od + 1, $jahr); // Ostern + 1 Tage
echo "Ostermontag: ".date('d.m.Y H:i:s', $ostermontag)." (".$ostermontag.")<br>\n";
if ($heute == $ostermontag) return(true);
// Himmelfahrt
$himmelfahrt = mktime(12, 0, 0, $om, $od + 39, $jahr); // Ostern + 39 Tage
echo "Himmelfahrt: ".date('d.m.Y H:i:s', $himmelfahrt)." (".$himmelfahrt.")<br>\n";
if ($heute == $himmelfahrt) return(true);
// Pfingstmontag
$pfingstmontag = mktime(12, 0, 0, $om, $od + 50, $jahr); // Ostern + 50 Tage
echo "Pfingstmontag: ".date('d.m.Y H:i:s', $pfingstmontag)." (".$pfingstmontag.")<br>\n";
if ($heute == $pfingstmontag) return(true);
return($IsFt); // falls es noch kein return gab, ist IsFt immer noch false
}
Anmerkung
Falls ich einen Fehler eingebaut habe und die Blegschaft deswegen irgendwann nicht zum Dienst erscheint, dann ist das ein von Euch gewollter Sonderurlaub.
Gruß Frank
p.s. hiermit kannst du Ostern "berechnen" und brauchst kein vordefiniertes Array der Tage
function GetEasterSunday($year){
$a = $year % 19;
$b = floor($year / 100);
$c = $year % 100;
$d = floor($b / 4);
$e = $b % 4;
$f = floor(($b + 8) / 25);
$g = floor(($b - $f + 1) / 3);
$h = ((19 * $a) + $b - $d - $g + 15) % 30;
$i = floor($c / 4);
$k = $c % 4;
$l = (32 + (2 * $e) + (2 * $i) - $h - $k) % 7;
$m = floor(($a + (11 * $h) + (22 * $l)) / 451);
$n = floor(($h + $l - (7 * $m) + 114) / 31);
$p = ($h + $l - (7 * $m) + 114) % 31;
$date = str_pad(($p + 1),2,"0",STR_PAD_LEFT) . "-" . str_pad(floor($n),2,"0",STR_PAD_LEFT) . "-" . $year;
return (new DateTime($date));
}
Hallo marathon,
ja, mit Osterformel ist es eleganter als mit vordefiniertem Array.
Ich habe Deine Funktion jetzt in den von mir modifizierten Code so eingebaut, dass sich dadurch insgesamt möglichst wenig Änderungen am Code ergeben, damit Erix83 es leichter hat das zu übernehmen, falls er denn möchte.
(Bis 2035 hat er noch Zeit zum Überlegen.)
In Bezug auf Deinen Code-Teil heißt das lediglich, dass der
@Erix83
Ist Dienstag eigenlich 2 oder 3 auf Deinem Server?
Gruß Frank
ja, mit Osterformel ist es eleganter als mit vordefiniertem Array.
Ich habe Deine Funktion jetzt in den von mir modifizierten Code so eingebaut, dass sich dadurch insgesamt möglichst wenig Änderungen am Code ergeben, damit Erix83 es leichter hat das zu übernehmen, falls er denn möchte.
(Bis 2035 hat er noch Zeit zum Überlegen.)
In Bezug auf Deinen Code-Teil heißt das lediglich, dass der
return
nicht $date
ist, sondern nur MM-TT
als String.@Erix83
Ist Dienstag eigenlich 2 oder 3 auf Deinem Server?
<?php
// *************************************************************************
// Diese Block ist nur zum Testen und dabei manuell Werte vorgeben zu können
$j = 2018;
$m = 5;
$t = 10;
$wt = 0;
$td = 0;
$ergebnis = feiertag($j, $m, $t, $wt, $td); // Hier wird manuell die Funktion aufgerufen
if ($ergebnis) {echo "Ergebnis: Heute ist Feiertag.<br>\n";} // Ausgabe bei Feiertag
else {echo "Ergebnis: Heute ist kein Feiertag.<br>\n";}; // oder eben kein Feiertag
// Hier endet der Testblock
// ************************
function feiertag ($jahr,$monat,$tag,$wtag,$today) {
echo "jahr: ".$jahr."<br>\n";
echo "monat: ".$monat."<br>\n";
echo "tag: ".$tag."<br>\n";
echo "wtag: ".$wtag."<br>\n";
echo "today: ".$today."<br>\n";
$IsFt = false; // erst Mal vom Schlechtesten ausgehen
// Feiertage BERLIN !!!!!!!!!!!!!!!!!
// ==================================
// unbewegliche Feiertage
switch ($monat) {
case 1:
$IsFt = ($tag == 1); // true bei Neujahr
break;
// case 2:
// case 3:
// case 4:
case 5:
$IsFt = ($tag == 1); // true bei Maifeiertag
break;
// case 6:
// case 7:
// case 8:
// case 9:
case 10:
$IsFt = ($tag == 3); // true bei Tag der deutschen Einheit
break;
// case 11:
case 12:
$IsFt = ($tag == 25) || ($tag == 26); // true bei 1. oder 2 . Weihnachtstag
break;
};
if ($IsFt) return(true); // es ist ein unbeweglicher Feiertag
$heute = mktime(12, 0, 0, $monat, $tag, $jahr); // = timestamp um 12 Uhr am gegebenen Datum
$wochentag = date('w', $heute); // = 0-6 (Sonntag-Samstag)
echo "Wochentag: ".$wochentag."<br>\n";
if ($wochentag == 2) return(false); // Dienstags gibt es keine beweglichen Feiertage in Berlin
if ($wochentag == 3) return(false); // Mittwochs gibt es keine beweglichen Feiertage in Berlin
if ($monat < 3) return(false); // für Berlin keine beweglichen Feriertage vor März
if ($monat > 6) return(false); // für Berlin keine beweglichen Feriertage nach Juni
$osterwert = ostern_ermitteln($jahr); // Die Funktion ostern_ermitteln() wird verwendet
$om = substr($osterwert, 0, 2);
$od = substr($osterwert, 3, 2);
$ostern = mktime(12, 0, 0, $om, $od ,$jahr);
echo "Heute: ".date('d.m.Y H:i:s', $heute)." (".$heute.")<br>\n";
// Karfreitag
$karfreitag = mktime(12, 0, 0, $om, $od - 2 ,$jahr); // Ostern - 2 Tage
echo "Karfreitag: ".date('d.m.Y H:i:s', $karfreitag)." (".$karfreitag.")<br>\n";
if ($heute == $karfreitag) return(true);
// Ostersonntag
echo "Ostersonntag: ".date('d.m.Y H:i:s', $ostern)." (".$ostern.")<br>\n"; // Ostern
if ($heute == $ostern) return(true);
// Ostermontag
$ostermontag = mktime(12, 0, 0, $om, $od + 1, $jahr); // Ostern + 1 Tage
echo "Ostermontag: ".date('d.m.Y H:i:s', $ostermontag)." (".$ostermontag.")<br>\n";
if ($heute == $ostermontag) return(true);
// Himmelfahrt
$himmelfahrt = mktime(12, 0, 0, $om, $od + 39, $jahr); // Ostern + 39 Tage
echo "Himmelfahrt: ".date('d.m.Y H:i:s', $himmelfahrt)." (".$himmelfahrt.")<br>\n";
if ($heute == $himmelfahrt) return(true);
// Pfingstmontag
$pfingstmontag = mktime(12, 0, 0, $om, $od + 50, $jahr); // Ostern + 50 Tage
echo "Pfingstmontag: ".date('d.m.Y H:i:s', $pfingstmontag)." (".$pfingstmontag.")<br>\n";
if ($heute == $pfingstmontag) return(true);
return($IsFt); // falls es noch kein return gab, ist IsFt immer noch false
}
function ostern_ermitteln($year) { // Wendet die Osterformel auf's übergebene Jahr an
$a = $year % 19;
$b = floor($year / 100);
$c = $year % 100;
$d = floor($b / 4);
$e = $b % 4;
$f = floor(($b + 8) / 25);
$g = floor(($b - $f + 1) / 3);
$h = ((19 * $a) + $b - $d - $g + 15) % 30;
$i = floor($c / 4);
$k = $c % 4;
$l = (32 + (2 * $e) + (2 * $i) - $h - $k) % 7;
$m = floor(($a + (11 * $h) + (22 * $l)) / 451);
$n = floor(($h + $l - (7 * $m) + 114) / 31);
$p = ($h + $l - (7 * $m) + 114) % 31;
// Gibt Ostermonat und -tag zurück im Format: MM-TT z.B.: 04-01 (für 2018)
return str_pad(floor($n),2,"0",STR_PAD_LEFT)."-".str_pad(($p + 1),2,"0",STR_PAD_LEFT);
}
Gruß Frank