Hauptmenü

Werkzeuge

Kategorien

Archiv

(Gesetzliche) Feiertage ermitteln in Abhängigkeit der Bundesländer mittels PHP

Erstellt in PHP am 22. Februar 2019 vom Daschmi

Mit folgender PHP Funktion, kann überprüft werden ob an einem Datum (Timestamp) ein Feiertag ist und wenn ja in welchem Bundesland.

class Helper {

	/**
	 * @param $tDay Timestamp des Tages, der auf einen Feiertag überprüft werden soll 
	 * @return array(
	 * 	'text' => '' Text
	 *  'feast' => boolean True wenn Feiertag
	 *  'arState' => '' Leerer Array oder Array mit Bundesländern für die der Feiertag gilt
	 * )
	 * 
	 * 	BW = Baden-Württemberg
	 * 	BY = Bayern
	 * 	BE = Berlin
	 * 	BB = Brandenburg
	 * 	HB = Bremen
	 * 	HH = Hamburg
	 * 	HE = Hessen
	 * 	MV = Mecklenburg-Vorpommern
	 * 	NI = Niedersachsen
	 * 	NW = Nordrhein-Westfalen
	 * 	RP = Rheinland-Pfalz
	 * 	SL = Saarland
	 * 	SN = Sachsen
	 * 	ST = Sachsen-Anhalt
	 * 	SH = Schleswig-Holstein
	 * 	TH = Thüringen
	 */
	public static function getFeastInfo($tDay) {
		
		$md = date('md', $tDay);		
		$tEaster = easter_date(date('Y', $tDay));
		
		$text = ''; $feast = ''; $arState = [];		
				
		if ($md == '0101') { $feast = _('Neujahr'); }
		else if ($md == '0501') { $feast = _('Erster Mai'); }
		else if ($md == '0106') { $feast = _('Heiligen Drei Könige'); $arState = ['BW', 'BY', 'ST']; }
		else if ($md == date('md', strtotime('-2 day', $tEaster))) { $feast = _('Karfreitag'); }
		else if ($md == date('md', $tEaster)) { $feast = _('Ostersonntag'); }
		else if ($md == date('md', strtotime('+1 day', $tEaster))) { $feast = _('Ostermontag'); $arState = ['SN']; }
		else if ($md == date('md', strtotime('+39 day', $tEaster))) { $feast = _('Christi Himmelfahrt'); }
		else if ($md == date('md', strtotime('+49 day', $tEaster))) { $feast = _('Pfingstsonntag'); }
		else if ($md == date('md', strtotime('+50 day', $tEaster))) { $feast = _('Pfingstmontag'); }
		else if ($md == date('md', strtotime('+60 day', $tEaster))) { $feast = _('Fronleichnam'); $arState = ['BW', 'BY', 'HE', 'NW', 'RP', 'SL', 'SN', 'TH']; }
		else if ($md == '0815') { $feast = _('Maria Himmelfahrt'); $arState = ['SL', 'BY']; }
		else if ($md == '1003') { $feast = _('Tag der deutschen Einheit'); }
		else if ($md == '1031') { $feast = _('Reformationstag'); $arState = ['BB', 'MV', 'SN', 'ST', 'TH']; }
		else if ($md == '1101') { $feast = _('Allerheiligen'); $arState = ['BW', 'BY', 'NW', 'RP', 'SL']; }
		else if ($md == date('md', strtotime("last wednesday", mktime(0, 0, 0, 11, 23,date('Y', $tDay))))) { $feast = _('Buß- und Bettag'); $arState = ['SN']; }
		else if ($md == '1224') { $feast = _('Heiliger Abend'); }
		else if ($md == '1225') { $feast = _('1. Weihnachtsfeiertag'); }
		else if ($md == '1226') { $feast = _('2. Weihnachtsfeiertag'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '1231') { $feast = _('Silvester (Bankfeiertag)'); }
		else if ($md == '0803') { $feast = _('Internationaler Frauentag'); $arState = ['BE']; }
					
		if (date('N', $tDay) === '6') $text = 'Samstag';
		else if (date('N', $tDay) === '7') $text = 'Sonntag';
		else $text = '';
		
		if (sizeof($arState) > 0) {
			
			$arStateMapping = [
				'BW' => 'Baden-Württemberg', 'BY' => 'Bayern', 'BE' => 'Berlin', 'HB' => 'Bremen', 'HH' => 'Hamburg', 'HE' => 'Hessen' ,'MV' => 'Mecklenburg-Vorpommern', 'NI' => 'Niedersachsen', 'NW' => 'Nordrhein-Westfalen',
				'RP' => 'Rheinland-Pfalz', 'SL' => 'Saarland', 'SN' => 'Sachsen', 'ST' => 'Sachsen-Anhalt', 'SH' => 'Schleswig-Holstein', 'TH' => 'Thüringen'
			];
			
			foreach ($arState as $k => $v) {
				
				$arState[$k] = $arStateMapping[$v];
				
			}
			
		}
						
		if ($feast === '' && $text === '') $text = 'Arbeitstag';
		else if ($feast !== '' && $text !== '') $text = $text.' ('.$feast.rtrim(', '.implode(', ', $arState), ' ,').')';
		else if ($feast !== '') $text = $feast.rtrim(', '.implode(', ', $arState), ' ,');
			
		return [
			'text' => $text, 
			'feast' => ($feast !== ''),
			'arState' => $arState
		];
		
	}

}

Siehe auch: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland