Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
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 Uhr) vom ü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 ) ); | ||
+ | |||
+ | 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 ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </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> | ||