Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:holiday

Dies ist eine alte Version des Dokuments!


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 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.
  • Ostersonntag ist immer zwischen dem 23. März und dem 24. April.
gesetzlicher Feiertag Zeitpunkt
Karfreitag Ostersonntag - 2 Tage
Ostersonntag Ostersonntag
Ostermontag Ostersonntag + 1 Tag
Christi Himmelfahrt Ostersonntag + 39 Tage
Pfingstsonntag Ostersonntag + 49 Tage
Pfingstmontag Ostersonntag + 50 Tage

Codebeispiel

Die PHP-Funktion easter_date( $year ) gibt den Timestamp vom Ostersonntag (0:00 Uhr) vom übergebenden Jahr zurück. Wichtiger technischer Hinweis: Die Funktion „easter_date“ ist in der Erweiterung „calendar“ enthalten. Wenn PHP auf einem Windows Betriebssystem ausgeführt wird sind die Kalenderfunktionen bereits automatisch enthalten. Auf Linux-Systemen muss PHP mit der Erweiterung '–enable-calendar' kompiliert werden. Andernfalls wird ein Fatal Error ('Call to undefined function') geworfen.

class.calendar.php
class calendar
{
    private $holidays = array();
 
    /**
     * calendar constructor.
     * @param int|string $year
     */
    public function __construct( $year = 0 )
    {
        $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( $year ) );
 
        foreach( array( -2, 0, 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.1488463753.txt.gz · Zuletzt geändert: 2017/03/02 00:00 (Externe Bearbeitung)