Ich habe einen Feiertagskalender geschrieben, vielleicht kann den jemand von euch brauchen.
Ich weiß, das BugFix einen ähnlichen geschrieben hat, aber meiner gibt wirklich nur die gesetzlichen Feiertage zurück und lässt Tage wie Muttertag, Vatertag, Valentinstag etc. außen vor. Weiterhin kann nach Bundesländern sortiert werden.
Ich habe es für ein Programm gebraucht, das an Feiertagen nicht laufen soll, sonst aber rund um die Uhr.
Hier dann das Script:
Spoiler anzeigen
;===============================================================================
; Function Name.....: _DateLegalHolidays($sState = "All", $iYear = @Year)
; Description.......: Gibt alle deutschen gesetzlichen Feiertage mit Datum in einem Array aus
; Parameter(s)......: $sState = Bundesland (Standard = All)
; ALL = Alle Feiertage
;~ BW = Baden-Württemberg
;~ NI = Niedersachsen
;~ BY = Bayern
;~ NW = Nordrhein-Westfalen
;~ BE = Berlin
;~ RP = Rheinland-Pfalz
;~ BB = Brandenburg
;~ SL = Saarland
;~ HB = Bremen
;~ SN = Sachsen
;~ HH = Hamburg
;~ ST = Sachsen-Anhalt
;~ HE = Hessen
;~ SH = Schleswig-Holstein
;~ MV = Mecklenburg-Vorpommern
;~ TH = Thüringen
; Return Value(s)...: Erfolg - Gibt Ein Array aus, in der ersten Dimension stehen die Daten, in der zweiten der Namen des Feiertages.
; $avHolidayReturn[0][0] gibt die Anzahl an Feiertagen für das Bundesland an
; Fehler
; Author(s).........: TheLuBu ([email='LuBu@veytal.com'][/email])
; Remarks...........: Using Gauss algorithm for Computus
; Copyright.........: TheLuBu ([email='LuBu@veytal.com'][/email])
;===============================================================================
Func _DateLegalHolidays($sState = "All")
Local $iYear, $avHolidayDate[12][3], $iModStart, $iModDiv, $iModLast, $iHolidayDay, $iHolidayMonth, $iFirstAdvent, $avHolidayReturn[16][2], $iRow = 0
For $i = 24 To 1 Step -1
If _DateToDayOfWeek($iYear, 12, $i) = 1 Then
If StringLen($i) = 1 Then
$i = "0" & $i
EndIf
$iFirstAdvent = $iYear & "/12/" & $i
ExitLoop
EndIf
Next
$iDivYear = Int($iYear / 100)
$iModStart = Mod(19 * Mod($iYear, 19) + $iDivYear - Int($iDivYear / 4) - Int(($iDivYear - Int(($iDivYear + / 25) + 1) / 3) + 15, 30)
$iModDiv = Mod(32 + 2 * Mod($iDivYear, 4) + 2 * Int(Mod($iYear, 100) / 4) - $iModStart - Mod(Mod($iYear, 100), 4), 7)
$iModLast = $iModStart + $iModDiv - 7 * Int((Mod($iYear, 19) + 11 * $iModStart + 22 * $iModDiv) / 451) + 22
If $iModLast - 31 < 1 Then
$iHolidayDay = $iModLast
Else
$iHolidayDay = $iModLast - 31
EndIf
If $iModLast > 31 Then
$iHolidayMonth = "04"
Else
$iHolidayMonth = "03"
EndIf
$avHolidayDate[0][0] = $iYear & "/" & $iHolidayMonth & "/" & $iHolidayDay
$avHolidayDate[0][1] = "Ostersonntag"
$avHolidayDate[0][2] = "All"
$avHolidayDate[1][0] = _DateAdd("D", -2, $avHolidayDate[0][0])
$avHolidayDate[1][1] = "Karfreitag"
$avHolidayDate[1][2] = "All"
$avHolidayDate[2][0] = _DateAdd("D", 1, $avHolidayDate[0][0])
$avHolidayDate[2][1] = "Ostermontag"
$avHolidayDate[2][2] = "All"
$avHolidayDate[3][0] = _DateAdd("D", 39, $avHolidayDate[0][0])
$avHolidayDate[3][1] = "Christi Himmelfahrt"
$avHolidayDate[3][2] = "All"
$avHolidayDate[4][0] = _DateAdd("D", 50, $avHolidayDate[0][0])
$avHolidayDate[4][1] = "Pfingstmontag"
$avHolidayDate[4][2] = "All"
$avHolidayDate[5][0] = _DateAdd("D", 60, $avHolidayDate[0][0])
$avHolidayDate[5][1] = "Fronleichnam"
$avHolidayDate[5][2] = "BW,BY,HE,NW,RP,SL"
$avHolidayDate[6][0] = @YEAR & "/10/03"
$avHolidayDate[6][1] = "Tag der Deutschen Einheit"
$avHolidayDate[6][2] = "All"
$avHolidayDate[7][0] = @YEAR & "/01/01"
$avHolidayDate[7][1] = "Neujahr"
$avHolidayDate[7][2] = "All"
$avHolidayDate[8][0] = @YEAR & "/05/01"
$avHolidayDate[8][1] = "Maifeiertag"
$avHolidayDate[8][2] = "All"
$avHolidayDate[9][0] = @YEAR & "/11/01"
$avHolidayDate[9][1] = "Allerheiligen"
$avHolidayDate[9][2] = "BW,BY,NW,RP,SL"
$avHolidayDate[10][0] = @YEAR & "/12/25"
$avHolidayDate[10][1] = "1. Weihnachtstag"
$avHolidayDate[10][2] = "All"
$avHolidayDate[11][0] = @YEAR & "/12/26"
$avHolidayDate[11][1] = "2. Weihnachtstag"
$avHolidayDate[11][2] = "All"
$avHolidayDate[12][0] = @YEAR & "/01/06"
$avHolidayDate[12][1] = "Heilige Drei Könige"
$avHolidayDate[12][2] = "BW,BY,ST"
$avHolidayDate[13][0] = @YEAR & "/08/15"
$avHolidayDate[13][1] = "Maria Himmelfahrt"
$avHolidayDate[13][2] = "SL"
$avHolidayDate[14][0] = @YEAR & "/10/31"
$avHolidayDate[14][1] = "Reformationstag"
$avHolidayDate[14][2] = "BB,MV,SN,ST,TH"
$avHolidayDate[15][0] = _DateAdd("D", -11, $iFirstAdvent)
$avHolidayDate[15][1] = "Buß und Bettag"
$avHolidayDate[15][2] = "SA"
If $sState <> "All" Then
For $i = 0 To UBound($avHolidayDate) - 1
If $avHolidayDate[$i][2] = "All" Or $avHolidayDate[$i][2] = $sState Then
$iRow += 1
$avHolidayReturn[$iRow][0] = $avHolidayDate[$i][0]
$avHolidayReturn[$iRow][1] = $avHolidayDate[$i][1]
EndIf
Next
ReDim $avHolidayReturn[$iRow + 1][2]
$avHolidayReturn[0][0] = $iRow
Return $avHolidayReturn
Else
Return $avHolidayDate
EndIf
EndFunc ;==>_DateLegalHolidays