1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
;===============================================================================
; 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 (LuBu@veytal.com)
; Remarks...........: Using Gauss algorithm for Computus
; Copyright.........: TheLuBu (LuBu@veytal.com)
;===============================================================================
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 + 8) / 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
|