Wochentagsberechnung von Javascript in Autoit übersetzten?

  • Um dieses Script geht es:

    Danke schon im Voraus!

  • Was macht denn das JS Skript genau (wie kann ich das Skript laufen lassen)? Hast du dir mal die _Date* Funktionen angeschaut?

    Ansonsten kann man das bestimmt mit AutoItObject realisieren...

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Hi!

    von BugFix

    Spoiler anzeigen
    [autoit]

    ; ----------------------------------------------------------------------------
    ; AutoIt Version: 3.3.0.0
    ;
    ;Osterformel (Gauss)
    ; a = Jahr mod 19
    ; b = Jahr mod 4
    ; c = Jahr mod 7
    ; H1 = Jahr div 100
    ; H2 = Jahr div 400
    ; N = 4 + H1 - H2
    ; M = 15 + H1 - H2 - [(8 * H1 + 13) div 25]
    ; d = (19 * a + M) mod 30
    ; e = (2 * b + 4 * c + 6 * d + N) mod 7
    ;wenn d + e = 35, dann ostern = 50
    ;wenn d = 28 und e = 6 und a > 10, dann ostern = 49
    ;in allen anderen Fällen: ostern = 22 + d + e
    ;ostern: Ostersonntag als Märzdatum
    ; ----------------------------------------------------------------------------
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Date.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", 1)
    Global $aRadioT[31], $aRadioM[12], $aHDays, $aLabel[32][2], $x, $y

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

    #region - GUI-Definition
    $gui = GUICreate("Wochen- und Feiertagsbestimmung", 680, 485, -1, -1)
    GUISetBkColor(0xFFFACD)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'Ende')
    $Label_1 = GUICtrlCreateLabel("Bestimmen Sie den Wochentag ! (gültig: 1583 - 8201)", 200, 10, 280, 20)
    GUICtrlSetColor($Label_1, 0xFF0000)
    $aktDatum = GUICtrlCreateLabel(@MDAY & "." & @MON & "." & @YEAR, 620, 10, 60, 20)
    ;Gruppe Optionsfelder zur Datumsauswahl
    $Group_T = GUICtrlCreateGroup(" Tag ", 15, 25, 650, 60)
    $x = 20
    For $i = 1 To 31
    $R_Name = $i
    If $i < 16 Then
    If $i < 10 Then $R_Name = "0" & $i
    $aRadioT[$i-1] = GUICtrlCreateRadio($R_Name, $x, 45, 30, 15)
    If $i = 15 Then
    $x = 20
    Else
    $x += 40
    EndIf
    Else
    $aRadioT[$i-1] = GUICtrlCreateRadio($R_Name, $x, 60, 30, 15)
    $x += 40
    EndIf
    If $i = @MDAY Then GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetOnEvent(-1, "_RunData")
    Next
    GUICtrlCreateGroup ("",-99,-99,1,1)
    $Group_M = GUICtrlCreateGroup(" Monat ", 15, 100, 255, 60)
    $x = 20
    For $i = 1 To 12
    $R_Name = $i
    If $i < 10 Then $R_Name = "0" & $i
    If $i < 7 Then
    $aRadioM[$i-1] = GUICtrlCreateRadio($R_Name, $x, 120, 30, 15)
    $x += 40
    Else
    If $i = 7 Then $x = 20
    $aRadioM[$i-1] = GUICtrlCreateRadio($R_Name, $x, 135, 30, 15)
    $x += 40
    EndIf
    If $i = @MON Then GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetOnEvent(-1, "_RunData")
    Next
    GUICtrlCreateGroup ("",-99,-99,1,1)
    $MsgTag = GUICtrlCreateLabel("", 340, 100, 200, 20)
    GUICtrlSetColor(-1, 0xFF0000)
    $Label_4 = GUICtrlCreateLabel("Jahr", 340, 122, 40, 20)
    $But_minus = GUICtrlCreateButton("-", 406, 123, 15, 15)
    GUICtrlSetOnEvent(-1, "Minus")
    $But_plus = GUICtrlCreateButton("+", 468, 123, 15, 15)
    GUICtrlSetOnEvent(-1, "Plus")
    $InYear = GUICtrlCreateInput(@YEAR, 425, 120, 40, 20, $SS_CENTER)
    GUICtrlSetOnEvent(-1, "_RunData")
    $Ende = GUICtrlCreateButton("Ende", 615, 105, 50, 20)
    GUICtrlSetOnEvent(-1, "Ende")
    $Schalt = GUICtrlCreateLabel("", 500, 122, 80, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    $Label_9 = GUICtrlCreateLabel("Wochentag:", 340, 145, 90, 20)
    $WTag = GUICtrlCreateLabel("", 425, 145, 90, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    $L_Feiertage = GUICtrlCreateLabel("Die Feiertage dieses Jahres", 265, 175, 150, 20)
    GUICtrlSetColor(-1, 0xFF0000)
    $L_Fix = GUICtrlCreateLabel("Unveränderlich:", 70, 200, 90, 20)
    GUICtrlSetColor(-1, 0xFF0000)
    $L_Variabel = GUICtrlCreateLabel("Veränderlich (gültig: 1583 - 2999):", 380, 200, 170, 20)
    GUICtrlSetColor(-1, 0xFF0000)
    ; Fixe Feiertage:
    $y = 220
    For $i = 0 to 10
    $aLabel[$i][0] = GUICtrlCreateLabel('', 80, $y, 180, 17)
    $aLabel[$i][1] = GUICtrlCreateLabel('date', 280, $y, 100, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $y += 15
    Next
    ; Adventstage
    GUICtrlCreateLabel("Adventstage:", 185, 420, 80, 20)
    GUICtrlSetColor(-1, 0xFF0000)
    $x = 80
    For $i = 28 To 31
    $aLabel[$i][0] = GUICtrlCreateLabel('', $x, 440, 60, 34)
    GUICtrlSetColor(-1, 0x0000FF)
    $x += 70
    Next
    ; Variable Feiertage:
    $y = 220
    For $i = 11 to 27
    $aLabel[$i][0] = GUICtrlCreateLabel('', 390, $y, 180, 17)
    $aLabel[$i][1] = GUICtrlCreateLabel('', 570, $y, 70, 17)
    GUICtrlSetColor(-1, 0x0000FF)
    $y += 15
    Next
    _RunData()
    GUISetState()
    #endregion - GUI-Definition

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

    While 1
    Sleep(100)
    WEnd

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

    #region - Funktionen
    Func Ende()
    Exit
    EndFunc

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

    Func Minus()
    GUICtrlSetData($InYear, GUICtrlRead($InYear) - 1)
    _RunData()
    EndFunc

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

    Func Plus()
    GUICtrlSetData($InYear, GUICtrlRead($InYear) + 1)
    _RunData()
    EndFunc

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

    Func _RunData()
    $aHDays = _Feiertage(GUICtrlRead($InYear))
    If _DateIsLeapYear(GUICtrlRead($InYear)) Then
    GUICtrlSetData($Schalt, 'Schaltjahr')
    Else
    GUICtrlSetData($Schalt, '')
    EndIf
    For $i = 0 to 31
    GUICtrlSetData($aLabel[$i][0], $aHDays[$i][0] & ' ' & $aHDays[$i][1])
    If $i > 27 Then ContinueLoop
    GUICtrlSetData($aLabel[$i][1], _
    _GetDateStr(_DateToDayOfWeek(StringRight($aHDays[$i][0],4), StringMid($aHDays[$i][0],4,2), StringLeft($aHDays[$i][0],2))))
    Next
    _WTag()
    EndFunc ;==> _RunData

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

    Func _WTag()
    Local $day, $mon
    GUICtrlSetData($MsgTag, '')
    For $i = 0 To 30
    If BitAND(GUICtrlRead($aRadioT[$i]), $GUI_CHECKED) Then
    $day = ControlGetText($gui, '', $aRadioT[$i])
    ExitLoop
    EndIf
    Next
    For $i = 0 To 11
    If BitAND(GUICtrlRead($aRadioM[$i]), $GUI_CHECKED) Then
    $mon = ControlGetText($gui, '', $aRadioM[$i])
    ExitLoop
    EndIf
    Next
    If _DateIsLeapYear(GUICtrlRead($InYear)) Then
    If $mon = 2 and $day > 29 Then
    $day = 29
    GUICtrlSetState($aRadioT[28],$gui_checked)
    GUICtrlSetData($MsgTag,"'Tag' für Berechnung auf "& $day & " korrigiert!")
    EndIf
    Else
    If $mon = 2 and $day > 28 Then
    $day = 28
    GUICtrlSetState($aRadioT[27],$gui_checked)
    GUICtrlSetData($MsgTag,"'Tag' für Berechnung auf "& $day & " korrigiert!")
    EndIf
    EndIf
    If ($mon = 4 Or $mon = 6 Or $mon = 9 Or $mon = 11 ) And $day > 30 Then
    $day = 30
    GUICtrlSetData($MsgTag,"'Tag' für Berechnung auf "& $day & " korrigiert!")
    GUICtrlSetState($aRadioT[29],$gui_checked)
    EndIf
    GUICtrlSetData($WTag, _GetDateStr(_DateToDayOfWeek(GUICtrlRead($InYear), $mon, $day)))
    EndFunc ;==>_WTag

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

    Func _GetDateStr($num)
    Switch $num
    Case 1
    Return "Sonntag"
    Case 2
    Return "Montag"
    Case 3
    Return "Dienstag"
    Case 4
    Return "Mittwoch"
    Case 5
    Return "Donnerstag"
    Case 6
    Return "Freitag"
    Case 7
    Return "Samstag"
    EndSwitch
    EndFunc

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

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ; Funktion _Feiertage($Jahr)
    ;
    ; gibt die Feiertage des übergebenen Jahres
    ; als sortiertes Array[TT.MM.JJJJ od. JJJJ/MM/TT][Feiertag] zurück (gegliedert fix/variabel)
    ; $DateTyp 1 - Datum als TT.MM.JJJJ (Standard)
    ; 0 - Datum als JJJJ/MM/TT
    ; Autor BugFix ([email='bug_fix@web.de'][/email])
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    Func _Feiertage($year, $DateTyp=1)
    Local $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp
    Local $HDays[32][2], $a, $b, $c, $d, $e, $H1, $H2, $N, $M
    ;fixe Feiertage
    $HDays[0][0] = $year & "/01/01\Neujahr"
    $HDays[1][0] = $year & "/01/06\Heilige Drei Könige"
    $HDays[2][0] = $year & "/02/14\Valentinstag"
    $HDays[3][0] = $year & "/05/01\Maifeiertag"
    $HDays[4][0] = $year & "/10/03\Tag der Deutschen Einheit"
    $HDays[5][0] = $year & "/10/31\Reformationstag"
    $HDays[6][0] = $year & "/11/01\Allerheiligen"
    $HDays[7][0] = $year & "/12/24\Heiligabend"
    $HDays[8][0] = $year & "/12/25\1. Weihnachtsfeiertag"
    $HDays[9][0] = $year & "/12/26\2. Weihnachtsfeiertag"
    $HDays[10][0] = $year & "/12/31\Silvester"
    ;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
    ; 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
    $HDays[11][0] = $WFastDate & "\Weiberfastnacht"
    $HDays[12][0] = $RosDat & "\Rosenmontag"
    $HDays[13][0] = $FastDat & "\Fastnacht"
    $HDays[14][0] = $AschDat & "\Aschermittwoch"
    $HDays[15][0] = $GrDoDat & "\Gründonnerstag"
    $HDays[16][0] = $KarDat & "\Karfreitag"
    $HDays[17][0] = $OSaDat & "\Ostersamstag"
    $HDays[18][0] = $OSoDat & "\Ostersonntag"
    $HDays[19][0] = $OMoDat & "\Ostermontag"
    $HDays[20][0] = $HiFaDat & "\Christi Himmelfahrt"
    $HDays[21][0] = $PfSoDat & "\Pfingstsonntag"
    $HDays[22][0] = $PfMoDat & "\Pfingstmontag"
    $HDays[23][0] = $MutterDat & "\Muttertag"
    $HDays[24][0] = $FroDat & "\Fronleichnam"
    $HDays[25][0] = $ErnteDat & "\Erntedankfest"
    $HDays[26][0] = $BuBDat & "\Buß- und Bettag"
    $HDays[27][0] = $TotSoDat & "\Totensonntag"
    $HDays[28][0] = $1AdvDat & "\1. Advent"
    $HDays[29][0] = $2AdvDat & "\2. Advent"
    $HDays[30][0] = $3AdvDat & "\3. Advent"
    $HDays[31][0] = $4AdvDat & "\4. Advent"
    _ArraySort($HDays, 0, 0, 10)
    _ArraySort($HDays, 0, 11)
    For $i = 0 To 31
    If $DateTyp Then ; Datum konvertieren zu TT.MM.JJJJ
    $tmp = StringSplit($HDays[$i][0], "\", 2)
    $HDays[$i][0] = StringMid($tmp[0], 9) & "." & StringMid($tmp[0], 6, 2) & "." & StringMid($tmp[0], 1, 4)
    $HDays[$i][1] = $tmp[1]
    Else
    $HDays[$i][1] = StringTrimLeft($HDays[$i][0], 11)
    $HDays[$i][0] = StringLeft($HDays[$i][0], 10)
    EndIf
    Next
    Return $HDays
    EndFunc ;==>_Feiertage
    #endregion - Funktionen

    [/autoit]

    Lg Kleiner