- Offizieller Beitrag
Ja, ich hatte damals das Bsp. einfach vorn drangeklatscht. Da muss natürlich das Include davor stehen.
Ja, ich hatte damals das Bsp. einfach vorn drangeklatscht. Da muss natürlich das Include davor stehen.
Hallo,
seit über 12 Jahren nutze ich schon AutoIt. Sowohl privat wie beruflich. Aber wie ich heute festgestellt habe, hatte ich noch kein Benutzkonto hier - habe wohl bisher nur Infos abgezogen.
Also heute mein erster Beitrag, als 22. Antwort unter dem ersten Beitrag von BugFix aus dem Jahre 2006:
Ich bin gerade dabei dieses Feiertags-Script für die Firma in eine Versandlösung zu integrieren. Das ist echt eine tolle Hilfe. Danke an Bugfix!
Da sich bzgl. Feiertage seit der letzten Aktualisierung 13.12.2009 einiges geändert hat und ich auch noch ein paar Kleinigkeiten korrigiert/optimiert habe, poste ich hier mal meinen aktuellen Stand. Vielleicht ist das für jemand auch hilfreich:
#include-once
#include <Array.au3>
#include <Date.au3>
$ret = _Feiertage(2022, 0, 1, 1)
_ArrayDisplay($ret)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Funktion _Feiertage($Jahr)
;
; gibt die Feiertage des übergebenen Jahres
; als sortiertes Array[TT.MM.JJJJ od. JJJJ/MM/TT][Feiertag][Geltungsbereich][opt. Wochentag] zurück
; Geltungsbereich Leerstring - kein offizieller Feiertag
; BG - Bundesweit Gesetzlich
; Regionalkennzeichen: BB-Brandenburg BE-Berlin BW-Baden-Württemberg BY-Bayern
; HB-Bremen HE-Hessen HH-Hamburg MV-Mecklenburg-Vorpommern
; NI-Niedersachsen NW-Nordrhein-Westfalen RP-Rheinland-Pfalz
; SH-Schleswig-Holstein SL-Saarland SN-Sachsen
; ST-Sachsen-Anhalt TH-Thüringen
;
; $DateTyp 1 - Datum als TT.MM.JJJJ (Standard)
; 0 - Datum als JJJJ/MM/TT
;
; $wDay 0 - keine Rückgabe Wochentag (Standard)
; 1 - Rückgabe Wochentag ($array[n][3])
;
; $sort 0 - gegliedert fix/variabel (Standard), innerhalb sortiert
; 1 - komplett sortiert
;
; Autor BugFix (bug_fix@web.de)
;
; Quelle: https://autoit.de/thread/119-wochentag-feiertagsermittlung/?pageNo=1
; Anpassungen durch Cablepornjunkie, im Vergleich zum Original (Version von BugFix von 13.12.2009):
; * Reformationstag auf 4 weitere Bundesländer erweitert
; * GB einheitlich umbenannt nach BG (= Bundesweit Gesetzlich)
; * alle nicht offiziellen Feiertage (z.B. Rosenmontag, Muttertag) entfernt
; * Frauentag und Weltkindertag hinzugefügt
; * Arraygröße kann einfach durch die Variable $AnzahlFeiertage angepasst werden
;
; hier gibt es die aktuelle Liste aller Feiertage: https://de.wikipedia.org/wiki/Gesetzliche_Feiertage_in_Deutschland
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func _Feiertage($year, $DateTyp = 1, $wDay = 0, $sort = 0)
Local $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp
Local $a, $b, $c, $d, $e, $H1, $H2, $N, $M
Local $AnzahlFeiertage = 17 ; Zahl anpassen, wenn sich an der Anzahl der Feiertage = Array was ändert!
Local $HDays[$AnzahlFeiertage][3]
;fixe Feiertage
$HDays[0][0] = $year & "/01/01\Neujahr\BG"
$HDays[1][0] = $year & "/01/06\Heilige Drei Könige\BW BY ST"
$HDays[2][0] = $year & "/03/08\Frauentag\BE"
$HDays[3][0] = $year & "/05/01\Maifeiertag\BG"
$HDays[4][0] = $year & "/08/15\Mariä Himmelfahrt\BY SL"
$HDays[5][0] = $year & "/09/20\Weltkindertag\TH"
$HDays[6][0] = $year & "/10/03\Tag der Deutschen Einheit\BG"
$HDays[7][0] = $year & "/10/31\Reformationstag\BB HB HH NI MV SH SN ST TH"
$HDays[8][0] = $year & "/11/01\Allerheiligen\BW BY NW RP SL"
; $HDays[7][0] = $year & "/12/24\Heiligabend\" ; falls dieser Tag mit ausgegeben werden soll: Auskommentierung entfernen und diesen sowie alle folgenden Array-Indexe anpassen + $AnzahlFeiertage um 1 erhöhen
$HDays[9][0] = $year & "/12/25\1. Weihnachtsfeiertag\BG"
$HDays[10][0] = $year & "/12/26\2. Weihnachtsfeiertag\BG"
; $HDays[10][0] = $year & "/12/31\Silvester\" ; falls dieser Tag mit ausgegeben werden soll: Auskommentierung entfernen und diesen sowie alle folgenden Array-Indexe anpassen + $AnzahlFeiertage um 1 erhöhen
;variable Feiertage
$a = Mod($year, 19)
$b = Mod($year, 4)
$c = Mod($year, 7)
$H1 = Int($year / 100)
$H2 = Int($year / 400)
$N = 4 + $H1 - $H2
$M = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13) / 25))
$d = Mod((19 * $a + $M), 30)
$e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
If $d + $e = 35 Then
$Easter = 50
Else
If $d = 28 And $e = 6 And $a > 10 Then
$Easter = 49
Else
$Easter = 22 + $d + $e
EndIf
EndIf
If $Easter < 32 Then
$EasterDay = $Easter
$EasterMonth = "03"
Else
$EasterDay = $Easter - 31
$EasterMonth = "04"
EndIf
If $EasterDay < 10 Then
$EasterDay = "0" & $EasterDay
EndIf
If $year < 1900 Then ; Datumsoperationen nur mgl. wenn > 1900 , Jahr wird konvertiert
$RestJahr = Mod($year, 100)
If _DateIsLeapYear($year) Then
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 20 & $RestJahr
Else
If $RestJahr < 10 Then
$RestJahr = "0" & $RestJahr
EndIf
$Tempyear = 19 & $RestJahr
EndIf
$EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
Else
$EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
EndIf
$WFastDate = _DateAdd('d', -52, $EasterDate)
$RosDat = _DateAdd('d', -48, $EasterDate)
$FastDat = _DateAdd('d', -47, $EasterDate)
$AschDat = _DateAdd('d', -46, $EasterDate)
$GrDoDat = _DateAdd('d', -3, $EasterDate)
$KarDat = _DateAdd('d', -2, $EasterDate)
$OSaDat = _DateAdd('d', -1, $EasterDate)
$OSoDat = $EasterDate
$OMoDat = _DateAdd('d', 1, $EasterDate)
$HiFaDat = _DateAdd('d', 39, $EasterDate)
$PfSoDat = _DateAdd('d', 49, $EasterDate)
$PfMoDat = _DateAdd('d', 50, $EasterDate)
$FroDat = _DateAdd('d', 60, $EasterDate)
; Ermitteln nicht von Ostern abhängiger, veränderlicher Feiertage
; 4.Advent = Sonntag vor 25.12. (zw. 18. u. 24.12.)
For $deztag = 18 To 24
If _DateToDayOfWeek($year, 12, $deztag) = 1 Then
$4AdvDat = $year & "/12/" & $deztag
$3AdvDat = _DateAdd('d', -7, $4AdvDat)
$2AdvDat = _DateAdd('d', -14, $4AdvDat)
$1AdvDat = _DateAdd('d', -21, $4AdvDat)
$TotSoDat = _DateAdd('d', -28, $4AdvDat)
$BuBDat = _DateAdd('d', -32, $4AdvDat)
ExitLoop
EndIf
Next
$HDays[11][0] = $KarDat & "\Karfreitag\BG"
$HDays[12][0] = $OMoDat & "\Ostermontag\BG"
$HDays[13][0] = $HiFaDat & "\Christi Himmelfahrt\BG"
$HDays[14][0] = $PfMoDat & "\Pfingstmontag\BG"
$HDays[15][0] = $FroDat & "\Fronleichnam\BW BY HE NW RP SL SN TH"
$HDays[16][0] = $BuBDat & "\Buß- und Bettag\SN"
If $sort Then
_ArraySort($HDays)
Else
_ArraySort($HDays, 0, 0, 11)
_ArraySort($HDays, 0, 12)
EndIf
If $wDay Then ReDim $HDays[$AnzahlFeiertage][4]
For $i = 0 To $AnzahlFeiertage - 1
$tmp = StringSplit($HDays[$i][0], "\", 2)
If $DateTyp Then ; Datum konvertieren zu TT.MM.JJJJ
$HDays[$i][0] = StringRight($tmp[0], 2) & "." & StringMid($tmp[0], 6, 2) & "." & StringLeft($tmp[0], 4)
If $wDay Then $HDays[$i][3] = _DateToDayOfWeek(StringLeft($tmp[0], 4), StringMid($tmp[0], 6, 2), StringRight($tmp[0], 2))
Else
$HDays[$i][0] = $tmp[0]
EndIf
$HDays[$i][1] = $tmp[1]
$HDays[$i][2] = $tmp[2]
If $wDay Then $HDays[$i][3] = _DateToDayOfWeek(StringLeft($tmp[0], 4), StringMid($tmp[0], 6, 2), StringRight($tmp[0], 2))
Next
Return $HDays
EndFunc ;==>_Feiertage
Alles anzeigen
Viele Grüße
Cablepornjunkie