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