Feiertage berechnen

Es gibt Feiertage welche immer am selben Datum sind. Diese fixen Feiertage müssen nicht berechnet werden. Die flexiblen Feiertage wie zum Beispiel Ostern können jeweils mit unterschiedlichen Formeln berechnet werden.

Fixe Feiertage

Datum Feiertag
01.01.xx Neujahrstag
06.01.xx Heilige 3 Könige
01.08.xx 1te August (Nationalfeiertag Schweiz)
24.12.xx Heiliger Abend
25.12.xx Weihnachtstag
26.12.xx Stephanstag
31.12.xx Silvester

Flexible Feiertage

Bei den Flexiblen Feiertagen ist vermutlich Ostern einer der wichtigsten Feiertage. Wenn man das Datum vom Ostersonntag hat, kann man mindestens 6 weitere Feiertage berechnen. Im Internet findet man einige Seiten welche die Berechung des Ostersonntags beschreiben, deshalb gehe ich in diesem Artikel nicht weiter auf die Gaußsche Osterformel von Carl Friedrich Gauß ein.

Flexible Feiertage im Verhältnis zum Ostersonntag

Tage Feiertag
- 46 Tage Aschermittwoch
- 7 Tage Palmsonntag
- 3 Tage Gründonnerstag
- 2 Tage Karfreitag
0 Ostersonntag
+ 1 Tage Ostermontag
+ 39 Tage Christi Himmelfahrt (der 40. Tag)
+ 49 Tage Pfingstsonntag
+ 50 Tage Pfingstmontag
+ 60 Tage Fronleichnam

PHP Formel (Beispiel)


function easterSunday($tYear) {
	$J = date ("Y", mktime(0, 0, 0, 1, 1, $tYear));

	$a = $J % 19;
	$b = $J % 4;
	$c = $J % 7;
	$m = number_format (8 * number_format ($J / 100) + 13) / 25 - 2;
	$s = number_format ($J / 100 ) - number_format ($J / 400) - 2;
	$M = (15 + $s - $m) % 30;
	$N = (6 + $s) % 7;
	$d = ($M + 19 * $a) % 30;

	if ($d == 29) {
		$D = 28;
	} else if ($d == 28 and $a >= 11) {
		$D = 27;
	} else {
		$D = $d;
	}

	$e = (2 * $b + 4 * $c + 6 * $D + $N) % 7;

	return mktime (0, 0, 0, 3, 21, $J) + (($D + $e + 1) * 86400);
}

$tYear = date('Y');

$easter = easterSunday($tYear);
// Aschermittwoch
echo strftime('%d.%m.%Y (%A) <br />',$easter - (46 * 86400));
// Palmsonntag
echo strftime('%d.%m.%Y (%A) <br />',$easter - (7 * 86400));
// Gründonnerstag
echo strftime('%d.%m.%Y (%A) <br />',$easter - (3 * 86400));
// Karfreitag
echo strftime('%d.%m.%Y (%A) <br />',$easter - (2 * 86400));
// Oster Sonntag
echo strftime('<b>%d.%m.%Y (%A)</b><br />',$easter);
// Ostermontag
echo strftime('%d.%m.%Y (%A)<br />',$easter + (1 * 86400));
// Christi Himmelfahrt (der 40. Tag)
echo strftime('%d.%m.%Y (%A) <br />',$easter + (39 * 86400));
// Pfingstsonntag
echo strftime('%d.%m.%Y (%A) <br />',$easter + (49 * 86400));
// Pfingstmontag
echo strftime('%d.%m.%Y (%A) <br />',$easter + (50 * 86400));
// Fronleichnam
echo strftime('%d.%m.%Y (%A) <br />',$easter + (60 * 86400));

easter_date() / easter_days()

Einfacher als die Formel zu erstellen ist es die PHP Funktionen easter_date() und/oder easter_days() zu verwenden.