easter_date();
// Neujahr setzen (fester Feiertag am 1. Januar)
// Hl. Drei Könige setzen (fester Feiertag am 6. Januar)
// Rosenmontag berechnen (beweglicher Feiertag; 48 Tage vor Ostern)
// Aschermittwoch berechnen (beweglicher Feiertag; 46 Tage vor Ostern)
// Karfreitag berechnen (beweglicher Feiertag; 2 Tage vor Ostern)
// Ostersonntag
// Ostermontag berechnen (beweglicher Feiertag; 1 Tag nach Ostern)
// Maifeiertag setzen (fester Feiertag am 1. Mai)
// Christi Himmelfahrt berechnen (beweglicher Feiertag; 39 Tage nach Ostern)
// Pfingstsonntag berechnen (beweglicher Feiertag; 49 Tage nach Ostern)
// Pfingstmontag berechnen (beweglicher Feiertag; 50 Tage nach Ostern)
// Fronleichnam berechnen (beweglicher Feiertag; 60 Tage nach Ostern)
// Mariä Himmelfahrt setzen (fester Feiertag am 15. August)
// Tag der deutschen Einheit setzen (fester Feiertag am 3. Oktober)
// Reformationstag setzen (fester Feiertag am 31. Oktober)
// Allerheiligen setzen (fester Feiertag am 1. November)
// Heiligabend setzen (fester 'Feiertag' am 24. Dezember)
// Erster Weihnachtstag setzen (fester 'Feiertag' am 25. Dezember)
// Zweiter Weihnachtstag setzen (fester 'Feiertag' am 26. Dezember)
// Sylvester setzen (fester 'Feiertag' am 31. Dezember)
PHP-Code:
// Errechnet das Datum des Ostersonntags für ein gegebenes Jahr
function easter($year) {
if($year > 2038 || $year < 1970) {
return false;
} else {
$a = $year % 19;
$b = $year % 4;
$c = $year % 7;
$m = ((8 * ($year / 100) + 13) / 25) - 2;
$s = ($year / 100) - ($year / 400) - 2;
$M = (15 + $s - $m) % 30;
$N = (6 + $s) % 7;
$d = ($M + 19 * $a) % 30;
if ($d == 29) {
$D = 28;
} elseif ($d == 28 && $a >= 11) {
$D = 27;
} else {
$D = $d;
}
$e = (2 * $b + 4 * $c + 6 * $D + $N) % 7;
$delta = $D + $e + 1;
$easter = gmmktime(0, 0, 0, 3, 21, $year) + $delta * (24 * 3600);
return $easter;
}
}
// Beseitigt Stundenanteile in einem UNIX-Zeitstempel
function ResetHours(&$timestamp) {
$hour = date('G', $timestamp);
$timestamp -= ($hour * 3600);
}
function ResetHour($timestamp) {
$hour = date('G', $timestamp);
$timestamp -= ($hour * 3600);
return $timestamp;
}
// Berechnet alle festen und variablen Feiertage eines gegebenen Jahrs.
// Die Feiertage werden als Array zurückgeliefert, wobei der Key dem
// Feiertagsnamen entspricht und der Wert dem entsprechenden Zeitstempel.
function Feiertage($year) {
$OneDay = 24 * 60 * 60;
$easter = easter($year);
if(!$easter) {
return false;
} else {
$advday = date('w', gmmktime(0, 0, 0, 11, 26, $year));
$advent = gmmktime(0, 0, 0, 11, 26, $year) + (($advday == 0 ? 0 : 7 - $advday) * $OneDay);
$holidays['Neujahr'] = gmmktime(0, 0, 0, 1, 1, $year);
$holidays['Heilige Drei Könige'] = gmmktime(0, 0, 0, 1, 6, $year);
$holidays['Rosenmontag'] = $easter - (48 * $OneDay);
$holidays['Fastnacht'] = $easter - (47 * $OneDay);
$holidays['Aschermittwoch'] = $easter - (46 * $OneDay);
$holidays['Karfreitag'] = $easter - (2 * $OneDay);
$holidays['Ostersonntag'] = $easter;
$holidays['Ostermontag'] = $easter + (1 * $OneDay);
$holidays['Tag der Arbeit'] = gmmktime(0, 0, 0, 5, 1, $year);
$holidays['Christi Himmelfahrt'] = $easter + (39 * $OneDay);
$holidays['Pfingstsonntag'] = $easter + (49 * $OneDay);
$holidays['Pfingstmontag'] = $easter + (50 * $OneDay);
$holidays['Fronleichnam'] = $easter + (60 * $OneDay);
$holidays['Mariä Himmelfahrt'] = gmmktime(0, 0, 0, 8, 15, $year);
$holidays['Tag der deutschen Einheit'] = gmmktime(0, 0, 0, 10, 3, $year);
$holidays['Reformationstag'] = gmmktime(0, 0, 0, 10, 31, $year);
$holidays['Allerheiligen'] = gmmktime(0, 0, 0, 11, 1, $year);
$holidays['Buß- und Bettag'] = $advent - (11 * $OneDay);
$holidays['1. Advent'] = $advent;
$holidays['2. Advent'] = $advent + (7 * $OneDay);
$holidays['3. Advent'] = $advent + (14 * $OneDay);
$holidays['4. Advent'] = $advent + (21 * $OneDay);
$holidays['Heiligabend'] = gmmktime(0, 0, 0, 12, 24, $year);
$holidays['1. Weihnachtsfeiertag'] = gmmktime(0, 0, 0, 12, 25, $year);
$holidays['2. weihnachtsfeiertag'] = gmmktime(0, 0, 0, 12, 26, $year);
$holidays['Silvester'] = gmmktime(0, 0, 0, 12, 31, $year);
array_walk($holidays, 'ResetHours');
return $holidays;
}
}
// Berechnet das Datum eines bestimmten Feiertags im gegebenen Jahr.
// Liefert als Ergebnis den Zeitstempel des Feiertags bzw. false wenn das Jahr
// ungültig oder der Feiertag unbekannt ist.
function Feiertag($year, $name) {
$OneDay = 24 * 60 * 60;
$easter = easter($year);
if(!$easter) {
return false;
} else {
$advday = date('w', gmmktime(0, 0, 0, 11, 26, $year));
$advent = gmmktime(0, 0, 0, 11, 26, $year) + (($advday == 0 ? 0 : 7 - $advday) * $OneDay);
switch (strtolower($name)) {
case 'neujahr': return ResetHour(gmmktime(0, 0, 0, 1, 1, $year));
case 'heilige drei könige': return ResetHour(gmmktime(0, 0, 0, 1, 6, $year));
case 'rosenmontag': return ResetHour($easter - (48 * $OneDay));
case 'fastnacht': return ResetHour($easter - (47 * $OneDay));
case 'aschermittwoch': return ResetHour($easter - (46 * $OneDay));
case 'karfreitag': return ResetHour($easter - (2 * $OneDay));
case 'ostersonntag': return ResetHour($easter);
case 'ostermontag': return ResetHour($easter + (1 * $OneDay));
case 'tag der arbeit': return ResetHour(gmmktime(0, 0, 0, 5, 1, $year));
case 'christi himmelfahrt': return ResetHour($easter + (39 * $OneDay));
case 'pfingstsonntag': return ResetHour($easter + (49 * $OneDay));
case 'pfingstmontag': return ResetHour($easter + (50 * $OneDay));
case 'fronleichnam': return ResetHour($easter + (60 * $OneDay));
case 'mariä himmelfahrt': return ResetHour(gmmktime(0, 0, 0, 8, 15, $year));
case 'tag der deutschen einheit': return ResetHour(gmmktime(0, 0, 0, 10, 3, $year));
case 'reformationstag': return ResetHour(gmmktime(0, 0, 0, 10, 31, $year));
case 'allerheiligen': return ResetHour(gmmktime(0, 0, 0, 11, 1, $year));
case 'buß- und bettag': return ResetHour($advent - (11 * $OneDay));
case '1. advent': return ResetHour($advent);
case '2. advent': return ResetHour($advent + (7 * $OneDay));
case '3. advent': return ResetHour($advent + (14 * $OneDay));
case '4. advent': return ResetHour($advent + (21 * $OneDay));
case 'heiligabend': return ResetHour(gmmktime(0, 0, 0, 12, 24, $year));
case '1. weihnachtsfeiertag': return ResetHour(gmmktime(0, 0, 0, 12, 25, $year));
case '2. weihnachtsfeiertag': return ResetHour(gmmktime(0, 0, 0, 12, 26, $year));
case 'silvester': return ResetHour(gmmktime(0, 0, 0, 12, 31, $year));
default: return false;
}
}
}
if (time() < Feiertag(date('Y'), 'Aschermittwoch')) {
echo 'Freut euch, die fünfte Jahreszeit ist noch nicht vorbei!';
}