Feiertage mit php ermitteln

Erstellt am 27. September 2007
  in
 
1273
vote

Manchmal möchte man überprüfen, ob ein bestimmtes Datum ein Feiertag, Arbeitstag oder Wochenende ist. Dafür habe ich jetzt eine kleine php Funktion geschrieben:

Demo für 2008

Das php Script:

Ist natürlich beliebig erweiterbar. Die Variable $bundesland ist optional, um die Feiertage von einem Bundesland zu ermitteln. Macht manchmal auch Sinn.


<?php
error_reporting
(E_ALL);
header("Content-Type: text/html; charset=UTF-8");

/**
 * Ermittle Feiertage, Arbeitstage und Wochenenden von einem Datum
 *
 * @param string $datum im Format YYYY-MM-DD
 * @param string $bundesland
 * @return string
 */
function feiertag ($datum,$bundesland='') {

    
$datum explode("-"$datum);

    
$datum[1] = str_pad($datum[1], 2"0"STR_PAD_LEFT);
    
$datum[2] = str_pad($datum[2], 2"0"STR_PAD_LEFT);

    if (!
checkdate($datum[1], $datum[2], $datum[0])) return false;

    
$datum_arr getdate(mktime(0,0,0,$datum[1],$datum[2],$datum[0]));

    
$easter_d date("d"easter_date($datum[0]));
    
$easter_m date("m"easter_date($datum[0]));

    
$status 'Arbeitstag';
    if (
$datum_arr['wday'] == || $datum_arr['wday'] == 6$status 'Wochenende';

    if (
$datum[1].$datum[2] == '0101') {
        return 
'Neujahr';
    } elseif (
$datum[1].$datum[2] == '0106') {
        return 
'Heilige Drei Könige';
    } elseif (
$datum[1].$datum[2] == '0319' && ($bundesland == 'k' || $bundesland == 'st' || $bundesland == 't' || $bundesland == 'v')) {
        return 
'Josef';
    } elseif (
$datum[1].$datum[2] == $easter_m.$easter_d) {
        return 
'Ostersonntag';
    } elseif (
$datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+1,$datum[0]))) {
        return 
'Ostermontag';
    } elseif (
$datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+39,$datum[0]))) {
        return 
'Christi Himmelfahrt';
    } elseif (
$datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+49,$datum[0]))) {
        return 
'Pfingstsonntag';
    } elseif (
$datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+50,$datum[0]))) {
        return 
'Pfingstmontag';
    } elseif (
$datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+60,$datum[0]))) {
        return 
'Fronleichnam';
    } elseif (
$datum[1].$datum[2] == '0501') {
        return 
'Erster Mai';
    } elseif (
$datum[1].$datum[2] == '0504' && $bundesland == 'ooe') {
        return 
'Florian';
    } elseif (
$datum[1].$datum[2] == '0815') {
        return 
'Mariä Himmelfahrt';
    } elseif (
$datum[1].$datum[2] == '0924' && $bundesland == 's') {
        return 
'Rupertitag';
    } elseif (
$datum[1].$datum[2] == '1010' && $bundesland == 'k') {
        return 
'Tag der Volksabstimmung';
    } elseif (
$datum[1].$datum[2] == '1026') {
        return 
'Nationalfeiertag';
    } elseif (
$datum[1].$datum[2] == '1101') {
        return 
'Allerheiligen';
    } elseif (
$datum[1].$datum[2] == '1111' && $bundesland == 'b') {
        return 
'Martini';
    } elseif (
$datum[1].$datum[2] == '1115' && ($bundesland == 'noe' || $bundesland == 'w')) {
        return 
'Leopoldi';
    } elseif (
$datum[1].$datum[2] == '1208') {
        return 
'Mariä Empfängnis';
    } elseif (
$datum[1].$datum[2] == '1224') {
        return 
'Heiliger Abend';
    } elseif (
$datum[1].$datum[2] == '1225') {
        return 
'Christtag';
    } elseif (
$datum[1].$datum[2] == '1226') {
        return 
'Stefanitag';
    } else {
        return 
$status;
    }

}

for (
$monat 1$monat <= 12$monat++) {

    echo 
'<strong>'.$monat.'</strong><br>';

    for (
$tag 1$tag <= 31$tag++) {

        
$tmp feiertag('2008-'.$monat.'-'.$tag,'noe');

        if (
$tmp == 'Arbeitstag' || $tmp == 'Wochenende') {
            echo 
$tag.'.'.$monat.': '.$tmp.'<br>';
        } else {
            echo 
$tag.'.'.$monat.': <strong>'.$tmp.'</strong><br>';
        }

    }

    echo 
'<br><br>';

}

?>

Kommentare

wollt einfach nur danke

wollt einfach nur danke sagen...
mit dieser funktion hast du mir sehr viel arbeit erspart :-)

wow, super sache! thx

wow, super sache! thx

Hallo, wie muss man das

Hallo, wie muss man das Bundesland eintragen, ich finde zwar gibt es da ein bestimmten Code? Kann mir echt nicht vorstellen wie ich da eintragen soll, da ja nicht mal eine Stelle dafür vorgesehen ist.

Das Beispiel gibt die

Das Beispiel gibt die jeweiligen Landesfeiertage der österreichischen Bundesländer zurück. zB diese Zeile:

} elseif ($datum[1].$datum[2] == '0319' && ($bundesland == 'k' || $bundesland == 'st' || $bundesland == 't' || $bundesland == 'v')) {

War für mich insofern wichtig, weil am Landesfeiertag auch frei ist; Eine Globale Lösung ist der Code nicht;