Diese Kategorie als RSS abonnieren

Kategorie: Blog::Web-Entwicklung::PHP

 

erstellt am 10.06.2008 um 11:15h

Berechnung von Feiertagen

Es gibt immer wieder Applikationen für die man die Feiertage des Jahres benötigt.
Nun kann man mühselig alle Feiertage der nächsten 5 Jahre in eine DB oder eine Datei hinterlegen. Meistens vergisst man dann diese Applikation und in 5 Jahren läuft dann nichts mehr.
Kalender Viel besser ist es also die Feiertage zu berechnen.
Hier folgt nun eine kleine Funktion, die die variablen Feiertage des Jahres ausrechnet.
Einziger Input für die Funktion ist das Jahr, für die man die Feiertage erhalten möchte.

Die Funktion bedient sich einer Formel um den Ostersonntag zu berechnen. Mehr dazu kann man in den Quellen nachlesen.
Vom Ostersonntag aus kann man dann mit folgender Liste alle anderen Feiertage bestimmen:

<?php
/**
 * @Author: Cord-Heinrich Pahlmann (E-Mail s. Impressum/Kontakt)
 * @Copyright: 2008 by Cord-Heinrich Pahlmann
 * @License: Distributed under the Lesser General Public License (LGPL)
 *         http://www.gnu.org/copyleft/lesser.html
 * Info: http://www.pahlmann.biz/blog/web_entwicklung/php/feiertage_berechnung
 */

/**
 * Berechnet die Feiertage des angegebenen Jahres und gibt ein Array mit diesen zurück
 * @param string $jahr -  Jahr für welches die Feiertage gesucht werden sollen
 * @return array $datums_array - Mehrdimensionales Array mit den Feiertage
 */
function berechne_feiertag($jahr)
{
    $H = floor(fmod((24 + 19*(floor(fmod($jahr, 19)))), 30));
    $I = floor($H - floor($H/28));
    $J = floor(fmod(($jahr + floor($jahr/4) + $I - 13), 7));
    $L = $I - $J;
    //Definition des Monats und des Tages vom Oster-Sonntag
    $monat = floor(3 + floor(($L + 40)/44));
    $tag = floor($L + 28 - 31 * floor($monat/4));

    //Definition des Timestamps vom Oster-Sonntag um 00:00:01h
    $timestamp = mktime(0,0,1,$monat, $tag, $jahr);

    $datums_array['ostersonntag'] = array("tag"=>$tag, "monat"=>$monat, "jahr"=>$jahr);

    $temp = $timestamp + 60 * 60 * 24;
    $datums_array['ostermontag'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp - 60 * 60 * 24 * 46;
    $datums_array['aschermittwoch'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp - 60 * 60 * 24 * 2;
    $datums_array['karfreitag'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp + 60 * 60 * 24 * 39;
    $datums_array['christi_himmelfahrt'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp + 60 * 60 * 24 * 49;
    $datums_array['pfingstsonntag'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp + 60 * 60 * 24 * 50;
    $datums_array['pfingmontag'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    $temp = $timestamp + 60 * 60 * 24 * 60;
    $datums_array['fronleichnam'] = array("tag"=>date("j", $temp), "monat"=>date("n", $temp), "jahr"=>date("Y", $temp));

    return $datums_array;
}
?>

Download der PHP-Datei: berechnung_feiertage.zip

Quellen:

 

 

Kommentare

am 17.07.2008 um 22:36h von Tim erstellt


Hi,

könntest Du das Ganze vielleicht nochmal übersichtlicher gestalten?
Vielleicht in eine Funktion oder Klasse packen?

 

am 18.07.2008 um 21:37h von chp erstellt


Hi Tim,

kann ich machen. Mal gucken ob ich das bis Ende nächster Woche hinkriege...

 

am 30.07.2008 um 13:43h von chp erstellt


Hi Tim,

hab es jetzt endlich geschafft alles in eine Funktion zu packen.
Ich glaube es fehlen noch ein paar Feiertage. Werde die bei Gelegenheit mal nachziehen. Dann packe ich wahrscheinlich alle festen Feiertage auch mit rein.

Außerdem könnte man sicherlich gleich im Funktionsaufruf den gewünschten Feiertag und bei Bedarf das Datums-Format auswählen. Komm sicher auch noch....

 

am 01.08.2008 um 09:23h von Tim erstellt


Jawoll, so sieht das schon wesentlich besser aus...

Die E-Mail-Funktion ist übrigens sehr cool. Hätte den Beitrag sicherlich aus den Augen verloren. Wenn ich dann mal wieder was zum Thema gesucht hätte, hätte ich diesen Beitrag sicherlich nicht gefunden.

 

Neuer Kommentar

Name/E-Mail
Sicherheitscode:
This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

E-Mail Benachrichtigung

Sie können hier Ihre E-Mail Adresse hinterlegen, bei jeder Änderung oder bei einem neuen Kommentar erhalten Sie eine kurze E-Mail.
Ihre E-Mail Adresse wird nur in Verbindung mit diesem Beitrag in unserer Datenbank gespeichert. Sie wird nicht zu Werbezwecken benutzt, an Dritte weitergegeben oder an irgendeiner Stelle veröffentlicht.

E-Mail:
Sicherheitscode:
This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)

installieren Windows Fehler Netbook USB Microsoft PHP Links Stick