Datumsausgabe

  • Guten Tag,
    Ich möchte ein Script schreiben, welches nach Eingabe eines Datums 2 Wochen zurück rechnet und das neue Datum ausgibt. Sowas lässt sich doch im besten mit #include <date.au3> realisieren. Folgendes Script habe ich bereits geschrieben, welches jedoch nicht den gewünschten Erfolg erzielt:

    [autoit]

    ; Programmstart
    ;includes
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ;Start der GUI
    #Region ### START Koda GUI section ### Form=
    $datumsschreiber = GUICreate("datumsschreiber", 348, 142, 194, 126)
    $Input1 = GUICtrlCreateInput("", 8, 32, 121, 21)
    $Label1 = GUICtrlCreateLabel("Bitte ein Datum eintragen :", 8, 8, 330, 17)
    $MenuItem2 = GUICtrlCreateMenu("&Datei")
    $MenuItem1 = GUICtrlCreateMenu("&Schließen")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $split

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Input1
    ;///Aufteilung des Datums
    $split = Stringsplit(GUICtrlRead($Input1), ".")
    If IsArray($split) Then
    msgbox(0,"Tag", $split[1])
    msgbox(0,"Monat", $split[2])
    msgbox(0,"Jahr", $split[3])
    ;///Start der Kalenderformel
    ;If $monat = 02 Then
    $monat = $split[2]
    $tag = 1
    $tag = ($split[1] - 7)

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

    If $tag < 1 Then
    $monat = ($split[2] - 1)
    $wochen =
    $tag = 31 - $wochen ;//minus rest von Woche
    EndIf
    ;///Ausgabe des Endergebnisses
    MsgBox(64, "test", "wert:" & $tag & " und " & $monat)
    Endif
    EndSwitch
    WEnd

    [/autoit]

    Wie kann man nun mithilfe der Date.au3 soetwas basteln, wie einen Kalender der auch das Schaltjahr usw. berücksichtigt, um dann 2 Wochen zurückzurechnen?

  • Leider liest diese Funktion nur das aktuelle Datum aus. Wie kann ich den Wert aus einer Variable ausrechnen lassen(Eingabe des Datums in zb. einer InputBox)

  • So müsste's geh'n (ungetestet):

    [autoit]

    #include <Date.au3>
    $Date = InputBox("Huhu","Bitte ein Datum eingeben")
    MsgBox(0,0, _DateAdd('w', -2, $Date))

    [/autoit]

    Einziger Nachteil:
    Datum muss in diesem Format angegeben werden: YYYY/MM/TT

  • Darauf bin ich auch gekommen, jedoch ergibt das den Rückgabewert 0. Habe auch schon die Funktion versucht allein ohne MSGBox aufzurufen, ($Input1 = _DateAdd('w', -2 )()) geht auch nicht. :(

  • Also bei mir funzt die Version von Oscar einwandfrei!
    Er gibt mir 2010/02/10 aus, also das Datum vor zwei Wochen.
    Verstehe nicht, was du sonst willst ;)

    edit: ehm ja das mit der inputbox funzt evtl nicht, weil du das Datum falsch formatiert eingibst.
    Dann ist ja klar, dass die Func 0 zurückgibt.

  • Folgendes Datum habe ich in meine Box eingegeben: 1992/05/24(mein Geburtsdatum) ;) , bei folgendem Code:

    [autoit]

    MsgBox(0,0, _DateAdd('w', -2, $Input1))

    [/autoit]

    Der Rückgabewert ist 0.

  • Bei mir klappt genau dein Datum perfekt! Ohne Probleme!
    Er gibt mir 1992/05/10 aus.
    Vielleicht hilft ja ein Update der Autoit Version, oder mal mit Beta bzw Stable versuchen.

    [autoit]

    #include <Date.au3>

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

    MsgBox(0,0, _DateAdd('w', -2, "1992/05/24"))

    [/autoit]

    Auch direkt so funzt es bei mir.

    btw dieses skript benutz ich immer um zu schauen, wieviel Tage es noch dauert, bis ich endlich 18 bin xD

    [autoit]

    #include <date.au3>
    $tage = _DateDiff("d",@year & "/" & @Mon & "/" & @MDay,"2010/04/03")
    msgbox(0,"",$tage)

    [/autoit]
  • So habe mal diesen Code eingegeben(zuvor neuste Version von AutoIt heruntergeladen):

    [autoit]

    $Input1 = _DateAdd('w', -2)
    MsgBox(64, "test", "wert: " & $Input1 )

    [/autoit]

    Dies ergibt jedoch mit der Funktion Syntax Check Prod folgende Fehlermeldung:

    Spoiler anzeigen

    AutoIt3 Syntax Checker v1.54.8 Copyright (c) Tylo 2007

    E:\TransFer\Arbeit und Leben\datumsschreiber\test.au3(40,27) : ERROR: _DateAdd() called with wrong number of args.
    $Input1 = _DateAdd('w', -2)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~^


    Woran kann das liegen?

  • Mir war langweilig, da hab ich ein paar alte Funktionen von mir zusammenkopiert:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>
    #include <GUIConstantsEx.au3>

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

    $hGUI = GUICreate("Form1", 235, 95, 200, 140)
    $hDate = GUICtrlCreateDate("", 10, 10, 220, 25, BitOR(0x04, 0x00))
    $hVal = GUICtrlCreateInput("1", 10, 40, 40, 20)
    GUICtrlCreateUpdown(-1)
    $hUni = GUICtrlCreateCombo("Tage", 60, 40, 85, 20, 0x0003)
    GUICtrlSetData(-1, "Wochen|Monate|Jahre|Jahrzehnte")
    $hDir = GUICtrlCreateCombo("Vor", 150, 40, 75, 20, 0x0003)
    GUICtrlSetData(-1, "Zurück")
    $hGO = GUICtrlCreateButton("Berechnen", 30, 65, 160, 25)
    GUISetState(@SW_SHOW)

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

    ;~ D - Add number of days To the given date
    ;~ M - Add number of months To the given date
    ;~ Y - Add number of years To the given date
    ;~ w - Add number of Weeks To the given date

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hGO
    $sDir = GUICtrlRead($hDir)
    $sVal = GUICtrlRead($hVal) * (0 + ($sDir = "Vor") - ($sDir = "Zurück"))
    Global $sUni
    Switch GUICtrlRead($hUni)
    Case "Tage"
    $sUni = "D"
    Case "Wochen"
    $sUni = "w"
    Case "Monate"
    $sUni = "M"
    Case "Jahrzehnte"
    $sVal *= 10
    ContinueCase
    Case "Jahre"
    $sUni = "Y"
    EndSwitch
    ;~ ConsoleWrite(GUICtrlRead($hUni) & @TAB & $sUni & @TAB & $sVal & @TAB & GUICtrlRead($hDate) & @CRLF)
    MsgBox(0, "", _Int2Long(_DateAdd($sUni, $sVal, _DELongFormat2Int(GUICtrlRead($hDate)))))

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

    EndSwitch
    WEnd

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

    Func _DELongFormat2Int($sDate)
    ;Gibt ein Datum im deutschen Longformat in internationalem Format wieder
    Local $aMonth[13] = ["-", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
    $aSplit = StringSplit($sDate, ",")
    If $aSplit[0] <> 1 Then
    $aSplit = StringSplit(StringTrimLeft($aSplit[2], 1), " ")
    For $i = 1 To 12
    If StringInStr($aSplit[2], $aMonth[$i]) Then $aSplit[2] = StringReplace($aSplit[2], $aMonth[$i], $i)
    Next
    $aSplit[1] = StringTrimRight($aSplit[1], 1)
    Return StringFormat("%04i/%02i/%02i", $aSplit[3], $aSplit[2], $aSplit[1])
    EndIf
    EndFunc ;==>_DELongFormat2Int
    Func _Int2Long($sDate)
    $_HGUI = GUICreate("")
    $_hDATE = GUICtrlCreateDate("", 20, 20)
    GUICtrlSetData($_hDATE, $sDate)
    $ret = GUICtrlRead($_hDATE)
    GUIDelete($_HGUI)
    Return $ret
    EndFunc ;==>_Int2Long

    [/autoit]