Feiertags Berechnung

  • Hallo Leute,

    ich brauch dringend eure Hilfe: (muss mit dem Script spätestens am Mittwoch online gehen)

    Ich muss ein Script schreiben das das Journal Datum einen Tag vor dem Feiertag setzt.
    zur Erklärung Journal Datum: das Journal wird in eine Datei exportiert. wir müssten vorher manuell das von und das bis Datum eingeben.

    (von einen Tag vorm Feiertag bis jetzigen Arbeitstag z.B. von 24.12.2006 bis 27.12.2006 !! ACHTUNG: Wochenende also nicht vom 24.12.2006 sondern, durch das Wochenende bedingt vom 22.12.2006)

    das gleiche ist am Wochenende: wenn Sonntag das Script läuft muss das von Datum auf Freitag gesetzt werden. (von Freitag bis Sonntag)

    dies will ich automatisieren.

    diese Script soll von Sonntag bis Freitag Nacht laufen.

    die Feiertage sollten in einer Feiertage.txt stehen oder (evtl. automatisch berechnet werden)

    so mein angefangenes Script:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $root = IniRead(@ScriptDir &"\Export.ini", "PFADE", "root", "keine Pfad konfiguriert")
    Global $CRS = IniRead($root&"\Scripts\Export.ini", "PFADE", "CRS", "keine Pfad konfiguriert")
    Global $JACDAT = IniRead($root&"\Scripts\Export.ini", "PFADE", "JACDAT", "keine Pfad konfiguriert")
    Global $feita = IniRead($root&"\time.stamp", "Feiertag", "Beginn", "keine Pfad konfiguriert")

    [/autoit] [autoit][/autoit] [autoit]

    ;-Time.wbt------------------------------------------------------------------------;
    ; Sicherung des Beginndatums in einer TMP Datei ;
    ;---------------------------------------------------------------------------------------;

    [/autoit] [autoit][/autoit] [autoit]

    ;-Errechnung des Belegdatums----------------------------------------------------------------------------;
    ;Errechnung des Wochentags

    [/autoit] [autoit][/autoit] [autoit]

    $WOTAG = _DateDayOfWeek( @WDAY, 1 )

    [/autoit] [autoit][/autoit] [autoit]

    ;Errechnung des Feiertagdatums

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $path = @ScriptDir & "\Feiertage.txt"

    [/autoit] [autoit][/autoit] [autoit]

    If _isFeiertag($path) = 1 Then

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $sNewDate = _DateAdd( 'd',-1, _NowCalcDate())
    ;~ $FDate= _DateTimeFormat($sNewDate,2)
    ;~ IniWrite($root&"\time.stamp", "Feiertag", "Beginn",$FDate)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ $FENDate= _DateTimeFormat(_NowCalcDate(),2)
    ;~ IniWrite($root&"\time.stamp", "Feiertag", "Ende",$FENDate)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ MsgBox(64, "Heute ausführen?", "Nein es ist Feiertag")
    Else


    ;~ Errechnung des Beginndatum
    If $WOTAG = "Son" THEN
    $sNewDate = _DateAdd( 'd',-2, _NowCalcDate())
    $BDate= _DateTimeFormat($sNewDate,2)
    IniWrite($root&"\time.stamp", "TIME", "Beginn",$BDate)
    else
    $BNDate= _DateTimeFormat( _NowCalcDate(),2)
    IniWrite($root&"\time.stamp", "TIME", "Beginn",$BNDate)
    Endif

    [/autoit] [autoit][/autoit] [autoit]

    ;Errechnung des Enddatum

    [/autoit] [autoit][/autoit] [autoit]

    $ENDate= _DateTimeFormat( _NowCalcDate(),2)
    IniWrite($root&"\time.stamp", "TIME", "Ende",$ENDate)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ MsgBox(64, "Heute ausführen?", "Ja")
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _isFeiertag($s_path)
    global $dates
    If Not _FileReadToArray($s_path, $dates) Then Return -1

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $dates[0]
    If $dates[$i] = _NowDate() Then
    Return 1
    EndIf
    Next
    Return 0
    EndFunc ;==>_isFeiertag

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]

    Feiertags.txt
    z.B.:
    04.12.2006
    05.12.2006
    08.12.2006
    25.12.2006
    26.12.2006
    01.01.2007

    time.stamp:

    [TIME]
    Beginn=04.12.2006
    Ende=04.12.2006

    [Feiertag]
    Beginn=
    Ende=

    • Offizieller Beitrag

    Hi,

    mal ein kleines Testprogramm:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $feiertage[4] = ["2006/12/24", "2006/12/25", "2006/12/26", "2006/12/31"]

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Check date", 220, 220)

    [/autoit] [autoit][/autoit] [autoit]

    $Date = GUICtrlCreateMonthCal("Kalender", 10, 10)
    $check = GUICtrlCreateButton("Check Datum", 10, 190, 150, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit (0)
    Case $Date
    ;MsgBox(0, "debug", GUICtrlRead($Date))
    Case $check
    check(GUICtrlRead($Date))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func check($Date)
    ;2006/12/05 Default Wert
    Local $GivenDate = $Date

    Do
    If _ArraySearch($feiertage, $Date) <> -1 Then $Date = _DateAdd("D", -1, $Date)
    Until _ArraySearch($feiertage, $Date) = -1

    Local $YearMonthDay = StringSplit($Date, "/")
    Local $weekDay = _DateToDayOfWeek($YearMonthDay[1], $YearMonthDay[2], $YearMonthDay[3])

    Switch $weekDay
    Case 1
    $Date = _DateAdd("D", -2, $Date)
    Case 7
    $Date = _DateAdd("D", -1, $Date)
    EndSwitch
    MsgBox(0, "Day", "Verarbeitung von : " & $GivenDate & @CRLF & "wird am " & @CRLF & $Date & @CRLF & "stattfinden")
    EndFunc ;==>check

    [/autoit]

    So long,

    Mega

    P.S: Ich hoffe es hilft. Einfach ins Array, die Feiertage einlesen und dan checken lassen.

  • Hi du hab das ganze auf unsere Österreichischen Feiertage angepasst blos hab ich ein Problem mit einem Datum 26.11.2006 dieses Datum hab ich eigentlich nicht definiert ....

    Es stimmen alle Feiertage bis auf den einen dieser ist ein normaler Arbeitstag

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <math.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ $jahr = IniRead(@ScriptDir & "\Export.ini", "FEIERTAGS_JAHR", "FETA", "")
    ;~ $jahr =2006
    $txtFile = "Feiertage.txt"
    $Pfad = @ScriptDir & "\" & $txtFile
    $arFeiertage = _Feiertage(2006)
    $file = FileOpen($Pfad, 2)
    For $i = 0 To UBound($arFeiertage)-1
    FileWriteLine($file, $arFeiertage[$i])
    Next
    FileClose($file)




    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _Feiertage($Jahr)
    ;
    ; gibt die Feiertage des übergebenen Jahres
    ; als sortiertes Array[TT.MM.JJJJ \ Feiertag] zurück
    ; (Trennzeichen veränderbar über Variable: $Delimiter)
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    [/autoit] [autoit][/autoit] [autoit]


    Func _Feiertage($year)
    Dim $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp, $Delimiter = "."
    Dim $HDays[21]

    ;fixe Feiertage
    $HDays[0] = $year & "/01/01" ;& $Delimiter & "Neujahr"
    $HDays[1] = $year & "/01/06" ;& $Delimiter & "Heilige Drei Könige"
    $HDays[2] = $year & "/05/01" ;& $Delimiter & "Maifeiertag"
    $HDays[3] = $year & "/08/15" ;& $Delimiter & "Mariä Himmelfahrt"
    $HDays[4] = $year & "/10/26" ;& $Delimiter & "Nationalfeiertag"
    $HDays[5] = $year & "/11/01" ;& $Delimiter & "Allerheiligen"
    $HDays[6] = $year & "/12/08" ;& $Delimiter & "Mariä Empfängnis"
    $HDays[7] = $year & "/12/25" ;& $Delimiter & "1. Weihnachtsfeiertag"
    $HDays[8] = $year & "/12/26" ;& $Delimiter & "2. Weihnachtsfeiertag"

    [/autoit] [autoit][/autoit] [autoit]

    ;variable Feiertage
    $aa = Mod($year, 19)
    $bb = Mod($year, 4)
    $cc = Mod($year, 7)
    $H1 = Int($year / 100)
    $H2 = Int($year / 400)
    $N = 4 + $H1 - $H2
    $MM = 15 + $H1 - $H2 - _Floor (Int((8 * $H1 + 13) / 25))
    $dd = Mod((19 * $aa + $MM), 30)
    $ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
    If $dd + $ee = 35 Then
    $Easter = 50
    Else
    If $dd = 28 And $ee = 6 And $aa > 10 Then
    $Easter = 49
    Else
    $Easter = 22 + $dd + $ee
    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
    ;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
    ;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
    For $maitag = 8 To 14
    If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
    If $maitag < 10 Then
    $maitag = "0" & $maitag
    EndIf
    $MutterDat = $year & "/05/" & $maitag
    If $MutterDat = $PfSoDat Then
    $MutterDat = _DateAdd( 'd', -7, $year & "/05/" & $maitag)
    EndIf
    ExitLoop
    EndIf
    Next

    ;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
    For $oktobertag = 1 To 7
    If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
    $oktobertag = "0" & $oktobertag
    $ErnteDat = $year & "/10/" & $oktobertag
    ExitLoop
    EndIf
    Next

    ;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

    [/autoit] [autoit][/autoit] [autoit]

    $HDays[09] = $OSaDat ;& $Delimiter & "Ostersamstag"
    $HDays[10] = $OSoDat ;& $Delimiter & "Ostersonntag"
    $HDays[11] = $OMoDat ;& $Delimiter & "Ostermontag"
    $HDays[12] = $HiFaDat ;& $Delimiter & "Christi Himmelfahrt"
    $HDays[13] = $PfSoDat ;& $Delimiter & "Pfingstsonntag"
    $HDays[14] = $PfMoDat ;& $Delimiter & "Pfingstmontag"
    $HDays[15] = $FroDat ;& $Delimiter & "Fronleichnam"
    $HDays[16] = $TotSoDat ;& $Delimiter & "Totensonntag"
    $HDays[17] = $1AdvDat ;& $Delimiter & "1. Advent"
    $HDays[18] = $2AdvDat ;& $Delimiter & "2. Advent"
    $HDays[19] = $3AdvDat ;& $Delimiter & "3. Advent"
    $HDays[20] = $4AdvDat ;& $Delimiter & "4. Advent"
    _ArraySort($HDays)
    ;Datum konvertieren zu TT.MM.JJJJ
    For $i = 0 To 20
    $tmp = StringSplit($HDays[$i], $Delimiter)
    $HDays[$i] = StringMid($tmp[1], 9) & "." & StringMid($tmp[1], 6, 2) & "." & StringMid($tmp[1], 1, 4) ;& $Delimiter & $tmp[2]
    Next
    Return $HDays
    EndFunc ;==>_Feiertage

    [/autoit]

    Ich bekomme einen Feiertag den ich nicht definiert habe :(

    Feiertag.txt

    [autoit][/autoit] [autoit][/autoit] [autoit]

    01.01.2006
    06.01.2006
    15.04.2006
    16.04.2006
    17.04.2006
    01.05.2006
    25.05.2006
    04.06.2006
    05.06.2006
    15.06.2006
    15.08.2006
    26.10.2006
    01.11.2006
    26.11.2006
    03.12.2006
    08.12.2006
    10.12.2006
    17.12.2006
    24.12.2006
    25.12.2006
    26.12.2006

    [/autoit]
  • in deiner text steht aber 26.11^^


    [autoit]

    01.01.2006
    06.01.2006
    15.04.2006
    16.04.2006
    17.04.2006
    01.05.2006
    25.05.2006
    04.06.2006
    05.06.2006
    15.06.2006
    15.08.2006
    26.10.2006
    01.11.2006
    26.11.2006 <-----!
    03.12.2006
    08.12.2006
    10.12.2006
    17.12.2006
    24.12.2006
    25.12.2006
    26.12.2006

    [/autoit]

    2 Mal editiert, zuletzt von huggy (5. Dezember 2006 um 16:10)

    • Offizieller Beitrag

    Ahhh, jetzt glaube ich, habe ich es.

    Du hast ein Skript, dass dir automatisiert Feiertage errechnet und da hast du noch Probleme.

    Anschließend nutzt du ein weiteres Skript mit einem Teil meines Skripts ggf. um die Verarbeitung zu kontrollieren. Da gibt es noch das Problem, wenn er auf einen sonntag triffst, dann wirft er dich auf einen Freitag und checkt nicht mehr ob dieser ein Feiertag ist.

    So long,

    Mega

    P.S.: Kann ich heute Abend mal gucken, falls es bis dahin keiner gemacht hat.

  • danke erst mal :)

    hier mein script:

    Spoiler anzeigen
    [autoit]

    #include<date.au3>
    #include<file.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $root = IniRead(@ScriptDir &"\Export.ini", "PFADE", "root", "keine Pfad konfiguriert")
    Global $CRS = IniRead($root&"\Scripts\Export.ini", "PFADE", "CRS", "keine Pfad konfiguriert")
    Global $JACDAT = IniRead($root&"\Scripts\Export.ini", "PFADE", "JACDAT", "keine Pfad konfiguriert")

    [/autoit] [autoit][/autoit] [autoit]

    Dim $feiertage
    If Not _FileReadToArray(@ScriptDir &"\feiertage.txt",$feiertage) Then
    MsgBox(4096,"Error", " Keine Feiertage eingelesen ")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    global $Date = _NowCalcDate()
    ;~ $check = GUICtrlCreateButton("Check Datum", 10, 190, 150, 20)

    [/autoit] [autoit][/autoit] [autoit]

    check($Date)

    [/autoit] [autoit][/autoit] [autoit]

    Func check($Date)
    ;2006/12/05 Default Wert
    Local $GivenDate = $Date

    Do
    If _ArraySearch($feiertage, $Date) <> -1 Then $Date = _DateAdd("D", -1, $Date)
    Until _ArraySearch($feiertage, $Date) = -1

    Local $YearMonthDay = StringSplit($Date, "/")
    Local $weekDay = _DateToDayOfWeek($YearMonthDay[1], $YearMonthDay[2], $YearMonthDay[3])

    Switch $weekDay
    Case 1
    $Date = _DateAdd("D", -2, $Date)
    Case 7
    $Date = _DateAdd("D", -1, $Date)
    EndSwitch

    $BDate= _DateTimeFormat($GivenDate,2)
    $EDate= _DateTimeFormat($Date,2)
    IniWrite("C:\time.stamp", "TIME", "Beginn",$BDate)
    IniWrite("C:\time.stamp", "TIME", "Ende",$EDate)


    MsgBox(0, "Day", "Verarbeitung von : " & $BDate & @CRLF & "wird am " & $EDate & @CRLF & "stattfinden")
    EndFunc ;==>check

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]


    das ist das andere script :)

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <math.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $jahr = IniRead(@ScriptDir & "\Export.ini", "FEIERTAGS_JAHR", "FETA", "")
    ;~ $jahr =2006
    $txtFile = "Feiertage.txt"
    $Pfad = @ScriptDir & "\" & $txtFile
    $arFeiertage = _Feiertage($jahr)
    $file = FileOpen($Pfad, 2)
    For $i = 0 To UBound($arFeiertage)-1
    FileWriteLine($file, $arFeiertage[$i])
    Next
    FileClose($file)




    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _Feiertage($Jahr)
    ;
    ; gibt die Feiertage des übergebenen Jahres
    ; als sortiertes Array[TT.MM.JJJJ \ Feiertag] zurück
    ; (Trennzeichen veränderbar über Variable: $Delimiter)
    ;
    ; Autor BugFix ([email='bugfix@autoit.de'][/email])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    [/autoit] [autoit][/autoit] [autoit]


    Func _Feiertage($year)
    Dim $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp, $Delimiter = "."
    Dim $HDays[21]

    ;fixe Feiertage
    $HDays[0] = $year & "/01/01" ;& $Delimiter & "Neujahr"
    $HDays[1] = $year & "/01/06" ;& $Delimiter & "Heilige Drei Könige"
    $HDays[2] = $year & "/05/01" ;& $Delimiter & "Maifeiertag"
    $HDays[3] = $year & "/08/15" ;& $Delimiter & "Mariä Himmelfahrt"
    $HDays[4] = $year & "/10/26" ;& $Delimiter & "Nationalfeiertag"
    $HDays[5] = $year & "/11/01" ;& $Delimiter & "Allerheiligen"
    $HDays[6] = $year & "/12/08" ;& $Delimiter & "Mariä Empfängnis"
    $HDays[7] = $year & "/12/25" ;& $Delimiter & "1. Weihnachtsfeiertag"
    $HDays[8] = $year & "/12/26" ;& $Delimiter & "2. Weihnachtsfeiertag"

    [/autoit] [autoit][/autoit] [autoit]

    ;variable Feiertage
    $aa = Mod($year, 19)
    $bb = Mod($year, 4)
    $cc = Mod($year, 7)
    $H1 = Int($year / 100)
    $H2 = Int($year / 400)
    $N = 4 + $H1 - $H2
    $MM = 15 + $H1 - $H2 - _Floor (Int((8 * $H1 + 13) / 25))
    $dd = Mod((19 * $aa + $MM), 30)
    $ee = Mod((2 * $bb + 4 * $cc + 6 * $dd + $N), 7)
    If $dd + $ee = 35 Then
    $Easter = 50
    Else
    If $dd = 28 And $ee = 6 And $aa > 10 Then
    $Easter = 49
    Else
    $Easter = 22 + $dd + $ee
    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
    ;Muttertag = 2. Sonntag im Mai ABER wenn Pfingsten = 2.Sonntag im Mai dann ist Muttertag am 1. Sonntag
    ;Der 2. Sonntag kann nur zw. dem 8. u. 14.5. liegen
    For $maitag = 8 To 14
    If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
    If $maitag < 10 Then
    $maitag = "0" & $maitag
    EndIf
    $MutterDat = $year & "/05/" & $maitag
    If $MutterDat = $PfSoDat Then
    $MutterDat = _DateAdd( 'd', -7, $year & "/05/" & $maitag)
    EndIf
    ExitLoop
    EndIf
    Next

    ;Erntedankfest 1. Sonntag im Oktober (zw. 1. u. 7.10.)
    For $oktobertag = 1 To 7
    If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
    $oktobertag = "0" & $oktobertag
    $ErnteDat = $year & "/10/" & $oktobertag
    ExitLoop
    EndIf
    Next

    ;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

    [/autoit] [autoit][/autoit] [autoit]

    $HDays[09] = $OSaDat ;& $Delimiter & "Ostersamstag"
    $HDays[10] = $OSoDat ;& $Delimiter & "Ostersonntag"
    $HDays[11] = $OMoDat ;& $Delimiter & "Ostermontag"
    $HDays[12] = $HiFaDat ;& $Delimiter & "Christi Himmelfahrt"
    $HDays[13] = $PfSoDat ;& $Delimiter & "Pfingstsonntag"
    $HDays[14] = $PfMoDat ;& $Delimiter & "Pfingstmontag"
    $HDays[15] = $FroDat ;& $Delimiter & "Fronleichnam"
    $HDays[16] = $TotSoDat ;& $Delimiter & "Totensonntag"
    $HDays[17] = $1AdvDat ;& $Delimiter & "1. Advent"
    $HDays[18] = $2AdvDat ;& $Delimiter & "2. Advent"
    $HDays[19] = $3AdvDat ;& $Delimiter & "3. Advent"
    $HDays[20] = $4AdvDat ;& $Delimiter & "4. Advent"
    _ArraySort($HDays)
    ;Datum konvertieren zu TT.MM.JJJJ
    For $i = 0 To 20
    $tmp = StringSplit($HDays[$i], $Delimiter)
    $HDays[$i] = StringMid($tmp[1], 1, 4) & "/" & StringMid($tmp[1], 6, 2) & "/" & StringMid($tmp[1], 9) ;& $Delimiter & $tmp[2]
    Next
    Return $HDays
    EndFunc ;==>_Feiertage

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    Hi,

    hier mal schnell die verbesserte Check()

    Spoiler anzeigen
    [autoit]

    Func check($Date)
    ;2006/12/05 Default Wert
    Local $GivenDate = $Date
    Do
    Do
    If _ArraySearch($feiertage, $Date) <> -1 Then $Date = _DateAdd("D", -1, $Date)
    Until _ArraySearch($feiertage, $Date) = -1

    Local $YearMonthDay = StringSplit($Date, "/")
    Local $weekDay = _DateToDayOfWeek($YearMonthDay[1], $YearMonthDay[2], $YearMonthDay[3])

    Switch $weekDay
    Case 1
    $Date = _DateAdd("D", -2, $Date)
    Case 7
    $Date = _DateAdd("D", -1, $Date)
    EndSwitch
    Until _ArraySearch($feiertage, $Date) = -1
    MsgBox(0, "Day", "Verarbeitung von : " & $GivenDate & @CRLF & "wird am " & @CRLF & $Date & @CRLF & "stattfinden")
    EndFunc ;==>check

    [/autoit]

    So long,

    Mega

    • Offizieller Beitrag

    Hi,

    wegen des 26.11. Wieso wird denn der 1.Advent berechnet? Bzw. wieso werden überhaupt Advents berechnet? Die liegen doch immer auf einem Sonntag, oder bei nicht? :irre:

    Genauso die ganzen anderen Feiertag am We: Totensonntag, Ostersonntag und was ihr sonst noch feiert.

    So long,

    Mega

    • Offizieller Beitrag

    Hmmh, bei mir springt er wenn ich es so mache richtigerweise auf den 28.12. wenn ich den 31.12 auswähle

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $feiertage[5] = ["2006/12/24", "2006/12/25", "2006/12/26", "2006/12/29", "2006/12/31"]

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Check date", 220, 220)

    [/autoit] [autoit][/autoit] [autoit]

    $Date = GUICtrlCreateMonthCal("Kalender", 10, 10)
    $check = GUICtrlCreateButton("Check Datum", 10, 190, 150, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit (0)
    Case $Date
    ;MsgBox(0, "debug", GUICtrlRead($Date))
    Case $check
    check(GUICtrlRead($Date))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func check($Date)
    ;2006/12/05 Default Wert
    Local $GivenDate = $Date
    Do
    Do
    If _ArraySearch($feiertage, $Date) <> -1 Then $Date = _DateAdd("D", -1, $Date)
    Until _ArraySearch($feiertage, $Date) = -1

    Local $YearMonthDay = StringSplit($Date, "/")
    Local $weekDay = _DateToDayOfWeek($YearMonthDay[1], $YearMonthDay[2], $YearMonthDay[3])

    Switch $weekDay
    Case 1
    $Date = _DateAdd("D", -2, $Date)
    Case 7
    $Date = _DateAdd("D", -1, $Date)
    EndSwitch
    Until _ArraySearch($feiertage, $Date) = -1
    MsgBox(0, "Day", "Verarbeitung von : " & $GivenDate & @CRLF & "wird am " & @CRLF & $Date & @CRLF & "stattfinden")
    EndFunc ;==>check

    [/autoit]

    Laß uns mal chatten in der ShoutBox

    So long,

    Mega

  • Zitat

    Original von th.meger
    Hmmh, bei mir springt er wenn ich es so mache richtigerweise auf den 28.12. wenn ich den 31.12 auswähle

    ja schon aber wenn ich an diese Woche denke gehts nicht.

    Wir haben am Fr. 08.12.2006 Feiertag also muss die Sonntags Datenverarbeitung von Donnerstag, 07.12.06 bis Sonntag den 10.12.06 sein

    liebe grüße aus Wien

  • Zitat

    Original von th.meger
    Hmmh, bei mir springt er wenn ich es so mache richtigerweise auf den 28.12. wenn ich den 31.12 auswähle

    hmm kann das sein das ich das Array falsch einlese???

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $feiertage
    If Not _FileReadToArray(@ScriptDir &"\feiertage.txt",$feiertage) Then
    MsgBox(4096,"Error", " Keine Feiertage eingelesen ")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    global $Date = _NowCalcDate()

    [/autoit] [autoit][/autoit] [autoit]

    check($Date)
    ....................................

    [/autoit]
  • hmmm das wäre mein kompettes script:

    Spoiler anzeigen
    [autoit]

    #include<date.au3>
    #include<file.au3>
    #include <Date.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $root = IniRead(@ScriptDir &"\Export.ini", "PFADE", "root", "keine Pfad konfiguriert")
    Global $CRS = IniRead($root&"\Scripts\Export.ini", "PFADE", "CRS", "keine Pfad konfiguriert")
    Global $JACDAT = IniRead($root&"\Scripts\Export.ini", "PFADE", "JACDAT", "keine Pfad konfiguriert")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ lese die Feiertage indas Array ein
    Global $feiertage
    If Not _FileReadToArray(@ScriptDir &"\feiertage.txt",$feiertage) Then
    MsgBox(4096,"Error", " Keine Feiertage eingelesen ")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;~ das aktuelle Datum

    [/autoit] [autoit][/autoit] [autoit]

    global $Date = _NowCalcDate()

    [/autoit] [autoit][/autoit] [autoit]

    ;~ die berechnung ausführen

    [/autoit] [autoit][/autoit] [autoit]

    check($Date)

    [/autoit] [autoit][/autoit] [autoit]

    Func check($Date)
    ;2006/12/05 Default Wert
    Local $GivenDate = $Date
    Do
    Do
    If _ArraySearch($feiertage, $Date) <> -1 Then $Date = _DateAdd("D", -1, $Date)
    Until _ArraySearch($feiertage, $Date) = -1

    Local $YearMonthDay = StringSplit($Date, "/")
    Local $weekDay = _DateToDayOfWeek($YearMonthDay[1], $YearMonthDay[2], $YearMonthDay[3])

    Switch $weekDay
    Case 1
    $Date = _DateAdd("D", -2, $Date)
    Case 7
    $Date = _DateAdd("D", -1, $Date)
    EndSwitch
    Until _ArraySearch($feiertage, $Date) = -1
    ;~ MsgBox(0, "Day", "Verarbeitung von : " & $GivenDate & @CRLF & "wird am " & @CRLF & $Date & @CRLF & "stattfinden")
    $EDate= _DateTimeFormat($GivenDate,2)
    $BDate= _DateTimeFormat($Date,2)
    IniWrite("C:\time.stamp", "TIME", "Beginn",$BDate)
    IniWrite("C:\time.stamp", "TIME", "Ende",$EDate)
    EndFunc ;==>check

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]