

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:
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'] == 0 || $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;