Benutzer-Werkzeuge

Webseiten-Werkzeuge


php:holiday

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
php:holiday [2016/11/22 17:23]
webproducer angelegt
php:holiday [2018/10/07 20:58] (aktuell)
Zeile 13: Zeile 13:
 ===== Bewegliche Feiertage ===== ===== Bewegliche Feiertage =====
  
-Alle beweglichen Feiertage können auf Grundlage des Ostersonntags berechnet werden.+Alle beweglichen Feiertage, mit Ausnahme vom [[buss_und_bettag|Buß- und Bettag]], ​können auf Grundlage des Ostersonntags berechnet werden.
  
 Für Ostersonntag gilt: Für Ostersonntag gilt:
Zeile 19: Zeile 19:
   * Ostersonntag ist der Sonntag nach dem ersten Vollmond ab Frühlingsbeginn,​ also ab dem 21. März   * 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.   * 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.+  * Somit liegt der frühestmögliche Termin für Ostersonntag ​beim 22. März und der späteste beim 25. April
  
-^gesetzlicher Feiertag ^ Zeitpunkt ^ +^gesetzlicher Feiertag ^ Zeitpunkt ​^Bundesländer
-| Karfreitag | Ostersonntag - 2 Tage | +| Karfreitag | Ostersonntag - 2 Tage | alle 
-| Ostersonntag | Ostersonntag | +| Ostersonntag | Ostersonntag ​| nur Brandenburg ​
-| Ostermontag | Ostersonntag + 1 Tag | +| Ostermontag | Ostersonntag + 1 Tag | alle 
-| Christi Himmelfahrt | Ostersonntag + 39 Tage | +| Christi Himmelfahrt | Ostersonntag + 39 Tage | alle 
-| Pfingstsonntag | Ostersonntag + 49 Tage | +| Pfingstsonntag | Ostersonntag + 49 Tage | alle 
-| Pfingstmontag | Ostersonntag + 50 Tage |+| Pfingstmontag | Ostersonntag + 50 Tage | alle | 
 +| Fronleichnam | Ostersonntag + 60 Tage | nur SL, RP, NW, BY, BW und TH | 
 +| [[buss_und_bettag|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.
  
 ---- ----
Zeile 33: Zeile 43:
 ===== Codebeispiel ===== ===== Codebeispiel =====
  
-Die PHP-Funktion ​easter_date( $year ) gibt den Timestamp vom Ostersonntag ​(0:00 Uhrvom übergebenden Jahr zurück.+In diesem Codebeispiel werden ausschließlich bundesweite Feiertage berücksichtigt. Bei Bedarf können, je nach Bundesland, die entsprechenden Feiertage ergänzt werden. 
 + 
 +<code php 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 ) ); 
 + 
 +        foreacharray( -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 ); 
 +    } 
 +
 + 
 +</​code>​ 
 +===== Anwendungsbeispiel===== 
 +<code php> 
 + 
 +$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 ) );
  
-PHP-Code-Beispiel folgt...+    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/>";​ 
 +    } 
 +
 +</​code>​
  
php/holiday.1479831824.txt.gz · Zuletzt geändert: 2016/11/22 00:00 (Externe Bearbeitung)