1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Cablepornjunkie

Beiträge von Cablepornjunkie

  • Wochentag- Feiertagsermittlung

    • Cablepornjunkie
    • 30. Mai 2022 um 11:51

    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:

    C
    #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

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™