

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;
Ganz große Klasse. Die
Ganz große Klasse. Die Bundesländer beziehen sich offenbar nur auf Österreich. Oder?
Ja genau. War damals für
Ja genau. War damals für einen Kunden aus Österreich wichtig.
Echt n1 dass du es
Echt n1 dass du es veröffentlicht hast, THX!!!
Leider noch etwas
Leider noch etwas unflexibel, aber der Ansatz ist nett und lässt sich weiterverarbeiten. Danke!
Ich wollte mich auch
Ich wollte mich auch anschließen - Danke!
Ich habe das ganze Ding erweitert um eine Arrayausgabe :
- Name des Tages
- Feiertag (1/0)
- Gesetzl. geschlossen (1/0)
- Vortag stärker frequentiert (1/0)
-- Deutsche Feiertage! (NRW) --
Wer Fehler findet darf sie behalten :-)
[php]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';
/*
Syntax bei Rückgabe : ,,,
*/
if ($datum[1].$datum[2] == '0101') {
return array('Neujahr',1,1,1);
} elseif ($datum[1].$datum[2] == '0106') {
return array('Heilige 3 Koenige',0,0,0);
} elseif ($datum[1].$datum[2] == '0501') {
return array('Maifeiertag',1,0,1);
} elseif ($datum[1].$datum[2] == '0214') {
return array('Valentinstag',0,0,1);
} elseif ($datum[1].$datum[2] == '0307') {
return array('Tag der gesunden Ernährung',0,0,0);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d-3,$datum[0]))) {
return array('Altweiber',0,0,1);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d-2,$datum[0]))) {
return array('Karfreitag',0,0,0);
} elseif ($datum[1].$datum[2] == $easter_m.$easter_d) {
return array('Ostersonntag',1,1,1);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+1,$datum[0]))) {
return array('Ostermontag',1,0,1);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+39,$datum[0]))) {
return array('Christi Himmelfahrt',1,1,0);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+49,$datum[0]))) {
return array('Pfingstsonntag',1,1,1);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+50,$datum[0]))) {
return array('Pfingstmontag',1,0,0);
} elseif ($datum[1].$datum[2] == date("md",mktime(0,0,0,$easter_m,$easter_d+60,$datum[0]))) {
return array('Fronleichnam',0,0,0);
} elseif ($datum[1].$datum[2] == date('d.m.Y',strtotime('second sunday',mktime(0,0,0,5,0,${year} ) ) ) ) {
return array('Muttertag',1,0,1);
} elseif ($datum[1].$datum[2] == '0815') {
return array('Himmelfahrt',0,0,0);
} elseif ($datum[1].$datum[2] == '1003') {
return array('Tag der dt. Einheit',1,0,0);
} elseif ($datum[1].$datum[2] == '0928') {
return array('Tag des Butterbrotes',0,0,0);
} elseif ($datum[1].$datum[2] == '1206') {
return array('Nikolaus',0,0,1);
} elseif ($datum[1].$datum[2] == '1111') {
return array('Martinstag',0,0,1);
} elseif ($datum[1].$datum[2] == '1101') {
return array('Allerheiligen',0,0,0);
} elseif ($datum[1].$datum[2] == '1224') {
return array('Heiligabend',0,0,1);
} elseif ($datum[1].$datum[2] == '1225') {
return array('Erster Weihnachtstag',1,1,1);
} elseif ($datum[1].$datum[2] == '1226') {
return array('Zweiter Weihnachtstag',1,1,0);
} elseif ($datum[1].$datum[2] == '1231') {
return array('Sylvester',0,0,0);
} else {
return array(0,0,0,0);
}
}
$FeiertagsArray = feiertag($stichtag,'noe');[/php]