Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:holiday

Ermittlung der bundesweit gesetzlichen Feiertage

Feste Feiertage

Diese Feiertage fallen im gesamten Bundesland jedes Jahr auf das selbe Datum:

  • 01.01. Neujahrstag
  • 01.05. Tag der Arbeit
  • 03.10. Tag der Deutschen Einheit
  • 25.12. Erster Weihnachtsfeiertag
  • 26.12. zweiter Weihnachtsfeiertag

Bewegliche Feiertage

Alle beweglichen Feiertage, mit Ausnahme vom Buß- und Bettag, können auf Grundlage des Ostersonntags berechnet werden.

Für Ostersonntag gilt:

  • Ostersonntag ist der Sonntag nach dem ersten Vollmond ab Frühlingsbeginn, also ab dem 21. März
  • Der durchschnittliche Abstand zwischen zwei Vollmonden beträgt 29 Tage, zwölf Stunden und vierundvierzig Minuten.
  • Somit liegt der frühestmögliche Termin für Ostersonntag beim 22. März und der späteste beim 25. April
gesetzlicher Feiertag Zeitpunkt Bundesländer
Karfreitag Ostersonntag - 2 Tage alle
Ostersonntag Ostersonntag nur Brandenburg
Ostermontag Ostersonntag + 1 Tag alle
Christi Himmelfahrt Ostersonntag + 39 Tage alle
Pfingstsonntag Ostersonntag + 49 Tage alle
Pfingstmontag Ostersonntag + 50 Tage alle
Fronleichnam Ostersonntag + 60 Tage nur SL, RP, NW, BY, BW und TH
Buß- und Bettag 11 Tage vor dem 1. Advent nur Sachsen

Ostersonntag mit der PHP-Funktion "easter_date" herausfinden

Die PHP-Funktion easter_date( $year ) gibt den Unix-Timestamp (Anzahl der Sekunden seit dem 01.01.1970) vom Ostersonntag um 0:00 Uhr vom als Parameter übergebendem Jahr zurück. Einschränkung: Es können nur Jahreszahlen von 1970 bis 2037 übergeben werden.

Wichtiger technischer Hinweis: Die Funktion „easter_date“ ist eine Funktion aus der Erweiterung „calendar“. Wenn PHP auf einem Windows Betriebssystem ausgeführt wird sind die Kalenderfunktionen bereits automatisch enthalten. Auf Linux-Systemen hingegen muss PHP mit der Erweiterung '–enable-calendar' kompiliert werden. Andernfalls wird ein Fatal Error ('Call to undefined function') geworfen.


Codebeispiel

In diesem Codebeispiel werden ausschließlich bundesweite Feiertage berücksichtigt. Bei Bedarf können, je nach Bundesland, die entsprechenden Feiertage ergänzt werden.

class.calendar.php
class calendar
{
    protected $holidays = array();
    protected $year = 0;
 
    /**
     * calendar constructor.
     * @param int|string $year
     */
    public function __construct( $year = 0 )
    {
        $this->year = ( $year == 0 ) ? date( 'Y' ) : $year;
 
        // feste Feiertage definieren
        $this->holidays[] = '01.01.'; // Neujahr
        $this->holidays[] = '01.05.'; // Tag der Arbeit
        $this->holidays[] = '03.10.'; // Tag der Deutschen Einheit
        $this->holidays[] = '25.12.'; // 1. Weihnachtsfeiertag
        $this->holidays[] = '26.12.'; // 2. Weihnachtsfeiertag
 
        // alle beweglichen Feiertage von Karfreitag bis Pfinstmontag
        $easterSunday = date( 'd.M.Y', easter_date( $this->year ) );
 
        foreach( array( -2, 1, 39, 49, 50 ) as $day )
        {
            $time = array( $easterSunday, $day, 'day');
            $ts = strtotime( implode( ' ', $time ) );
            $this->holidays[] = date( 'd.m.', $ts );
        }
    }
 
    /**
     * @param int $timestamp
     * @return bool
     */
    public function isHoliday( $timestamp )
    {
        $date = date( 'd.m.', $timestamp );
        return in_array( $date, $this->holidays );
    }
}

Anwendungsbeispiel:

$cal = new calendar( 2016 );
$days = ( date( 'L' ) ) ? 366 : 365; // Schaltjahr: 366 Tage, sonst 365 Tage
 
for( $day = 0; $day < $days; $day++ ) // jeden Tag des Jahres anzeigen
{
    $time = array( '01.01.' . date( 'Y' ), $day, 'day' );
    $timestamp = strtotime( implode( ' ', $time ) );
 
    if( $cal->isHoliday( $timestamp ) ) // wenn der Tag ein Feiertag ist
    {
        echo "Der " . date( 'd.m.Y.', $timestamp ) . " ein Feiertag!<br/>";
    }
    else // wenn der Tag KEIN Feiertag ist
    {
        echo "Der " . date( 'd.m.Y.', $timestamp ) . " ist kein Feiertag<br/>";
    }
}
php/holiday.txt · Zuletzt geändert: 2018/10/07 20:58 (Externe Bearbeitung)