erix83
Goto Top

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:

<?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 face-sad

Viele Grüße
Erik

Content-Key: 371405

Url: https://administrator.de/contentid/371405

Printed on: April 18, 2024 at 08:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Apr 17, 2018 at 08:03:59 (UTC)
Goto Top
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
Member: Erix83
Erix83 Apr 17, 2018 at 08:10:02 (UTC)
Goto Top
Sorry, komme weder aus der Programmier-Branche noch nutze ich Foren sonderlich oft. Die "Codeblock hinzufügen"-Funktion habe ich aber jetzt gefunden.

Wie genau funktioniert das mit den APIs?
Member: manuel-r
manuel-r Apr 17, 2018 at 08:59:43 (UTC)
Goto Top
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
echo "angegebenes Jahr: ".$jahr;  
einbauen und dann sagen was dabei als Jahr angezeigt wird?

Manuel
Mitglied: 135950
135950 Apr 17, 2018 updated at 09:07:58 (UTC)
Goto Top
Zitat von @Erix83:
Wie genau funktioniert das mit den APIs?
z.B. so
<?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 :-(";	  
	}
?>
Gruß m.
Member: Erix83
Erix83 Apr 17, 2018 at 09:17:19 (UTC)
Goto Top
Danke für die Analyse. Also wenn ich es so mache, wie du vorschlägst und die Datei im Browser öffne, begrüßt mich eine leere Seite. Ich vermute mal, dass das daran liegt, dass die Variablen $jahr, $monat, etc. von irgendwo übergeben/geholt werden? Müssen für die Suche nun alle anderen PHP-Dateien nach "$jahr = ..." durchsucht werden, oder gibts eine schnellere Lösung?
Member: manuel-r
manuel-r Apr 17, 2018 at 09:19:56 (UTC)
Goto Top
Klar. Die Variablen werden von irgendeinem anderen Script an die Funktion übergeben beim Aufruf.
Wenn du also deinen Kalender aufrufst in dem normalerweise Feiertage angezeigt werden sollte es dir jetzt etwas die Optik zerschossen haben und irgendwo müsste stehen angegebenes Jahr: xxxx.
Member: WinCobold
WinCobold Apr 17, 2018 at 11:07:08 (UTC)
Goto Top
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
Member: Erix83
Erix83 Apr 17, 2018 at 13:15:52 (UTC)
Goto Top
Hmm, Fragen über Fragen face-smile

Also, ich habe den Kollegen ausfindig gemacht, der diese +3600 hinzugefügt hat. Leider kann er sich nicht mehr genau an den Vorgang erinnern, aber er meinte, dass wohl in bestimmten Kalenderansichten manche Tage doppelt angezeigt wurden und das immer am Ende bestimmter Monate, also z.B.: 27.3. 28.3. 29.3. 30.3. 31.3. 31.3. 1.4. etc. - er hatte das damals wohl irgendwie auf die Umstellung von Sommer-/Winterzeit zurückgeführt. Mehr konnte er mir nicht mehr sagen (ist bereits im Ruhestand).

Ich habe jetzt einfach mal die +3600 entfernt bei den 4 beweglichen Feiertagen und siehe da, die Tage werden im Kalender wieder rot markiert.
Ich befürchte jetzt allerdings, wieder der vorherigen Fehler mit den doppelten Tagen hervorgerufen zu haben, kann das aber im Moment nicht nachvollziehen, bisher sieht alles OK aus.

@Manuel: ich habe die entsprechende Stelle gefunden: es wurde 2018 ausgegeben.

@WinCobold: Das ist mir alles zu Fremd, als das ich hier eine adäquate Antwort geben könnte face-sad Ich habe in anderen PHP-Dateien bereits Einträge und Funktionen zum Thema Zeitzonen, -verschiebung und Sommer-/Winterzeit gefunden, schaue da aber wie ein Schwein ins Uhrwerk.

Hat vielleicht jemand Lust auf ne Teamviewer-Session?
Member: Pedant
Pedant Apr 17, 2018 at 14:32:07 (UTC)
Goto Top
Hallo Erix83,

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
Member: Erix83
Erix83 Apr 17, 2018 at 14:55:52 (UTC)
Goto Top
Hallo,

anbei die Ausgabe:
****************
Jahr: 2018
Monat: 4
Tag: 17
Wochentag: 3
Heute: 1523919600
****************

Viele Grüße
Erik
Member: Pedant
Pedant Apr 17, 2018 at 17:00:55 (UTC)
Goto Top
Hallo Erik,

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
Member: Pedant
Solution Pedant Apr 17, 2018 at 20:43:25 (UTC)
Goto Top
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 $wtag und $today habe ich ignoriert
und 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
Member: Erix83
Erix83 Apr 18, 2018 at 12:58:29 (UTC)
Goto Top
Super, es funktioniert alles, wie es soll face-smile

Vielen Dank an alle, die dazu beigetragen haben, besonders aber an Frank.
Mitglied: 135950
Solution 135950 Apr 18, 2018 updated at 14:14:04 (UTC)
Goto Top
p.s. hiermit kannst du Ostern "berechnen" und brauchst kein vordefiniertes Array der Tage face-smile
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));
}
Member: Pedant
Solution Pedant Apr 18, 2018 at 16:37:51 (UTC)
Goto Top
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 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
Member: Erix83
Erix83 Apr 19, 2018 at 12:07:53 (UTC)
Goto Top
Und nochmal danke euch beiden face-smile