Benötige hilfe bei dem "Date Time Picker"

  • Kann mir mal jemand bei dem Date Time Picker auf die Sprünge helfen ?

    Mit dem Date Time Picker wird einfach nicht die Differenz (in Tagen) berechnet. Mit dem normalen Kalender funktioniert es aber.
    Hat jemand Erfahrung mit dem Teil?

    Danke schon mal. :rolleyes:

    Spoiler anzeigen
    [autoit]


    #cs
    Es soll die Differenz der beiden Datumswerte in Tagen berechnet werden

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

    #CE
    #include <GuiEdit.au3>
    #include <Date.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiDateTimePicker.au3>
    Opt("GUIOnEventMode", 1)
    Opt("GUICloseOnESC", 0)

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

    $Form1 = GUICreate(@ScriptName, 500, 500, 150, 150)
    ;~ $ETag = GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 20, 175, 175,0); damit geht es
    $ETag=GUICtrlCreateDate("2010/02/13", 156, 56, 127, 24, $DTS_SHORTDATEFORMAT)
    GUICtrlCreateLabel("Start",100,58,40,17)
    $LTag=GUICtrlCreateDate("2010/02/28", 156,100, 127, 24, $DTS_SHORTDATEFORMAT)
    ;~ $LTag= GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 230, 175, 175,0); damit geht es
    GUICtrlCreateLabel("Ende",100,100,40,17)
    $diff=GUICtrlCreateInput("",156,150,40,24)
    GUICtrlCreateLabel("Differenz",90,150,50,17)
    GUICtrlSetTip(-1,"Differenz in Tagen")
    ;## Button
    Global $btn1 = GUICtrlCreateButton('Differenz berechnen', 10, 20)
    GUICtrlSetOnEvent($btn1, "_Start")
    Global $btn1 = GUICtrlCreateButton('Abbrechen', 10, 60)
    GUICtrlSetOnEvent($btn1, "_Abbrechen")
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")
    GUISetState(@SW_SHOW)

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

    Func _GUIEvents();==> Knöpfe Maximieren Minimieren Ende
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
    Case @GUI_CtrlId = $GUI_EVENT_RESTORE
    EndSelect
    EndFunc

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

    Func _Abbrechen();==> Abbruch Programm verlassen.
    Exit
    EndFunc

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

    Func _Start() ;==> Brechnung "Die nicht Funktioniert"
    _GUICtrlEdit_InsertText($diff,_DateDiff("D",GUICtrlRead($ETag),GUICtrlRead($LTag)))

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

    ConsoleWrite(GUICtrlRead($ETag)&@CRLF)
    ConsoleWrite(GUICtrlRead($LTag)&@CRLF)
    ConsoleWrite($diff&@CRLF)

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

    EndFunc

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

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von mm4040 (27. Februar 2010 um 19:22)

  • DateDiff benötigt internationales Format. Der date Picker gibt aber das Deutsche zurück.

    Hier ein paar Funktionen die dir helfen sollten:

    Spoiler anzeigen
    [autoit]

    Func _DELong2Int($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 ;==>_DELong2Int

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

    Func _Int2DELong($sDate)
    $oldhWnd = GUISwitch("")
    $hGUI = GUICreate("")
    $hDate = GUICtrlCreateDate("", 20, 20)
    GUICtrlSetData($hDate, $sDate)
    $ret = GUICtrlRead($hDate)
    GUIDelete($hGUI)
    Return $ret
    EndFunc ;==>_Int2DELong

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

    Func _DEShort2Int($sDate)
    $aSplit = StringSplit($sDate, ".")
    Return StringFormat("%04i/%02i/%02i", $aSplit[3], $aSplit[2], $aSplit[1])
    EndFunc ;==>_DEShort2Int

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

    Func _Int2DEShort($sDate)
    $sDate = _Int2DELong($sDate)
    Return _DELong2DEShort($sDate)
    EndFunc ;==>_Int2DEShort

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

    Func _DELong2DEShort($sDate)
    $aSplit = StringSplit($sDate, ",")
    Local $aMonth[13] = ["-", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
    For $i = 1 To 12
    If StringInStr($aSplit[2], $aMonth[$i]) Then $aSplit[2] = StringReplace($aSplit[2], $aMonth[$i], $i)
    Next
    $aSplit = StringSplit($aSplit[2], " ")
    Return StringFormat("%02i.%02i.%04i", StringTrimRight($aSplit[2], 1), $aSplit[3], $aSplit[4])
    EndFunc ;==>_DELong2DEShort

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

    Func _DEShortToDELong($sDate)
    $oldhWnd = GUISwitch("")
    $hGUI = GUICreate("")
    $hDate = GUICtrlCreateDate("", 20, 20)
    GUICtrlSetData($hDate, _DEShortFormat2Int($sDate))
    $ret = GUICtrlRead($hDate)
    GUIDelete($hGUI)
    Return $ret
    EndFunc ;==>_DEShortToDELong

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

    (Die sind sau alt, deswegen gehts wahscheinlcih auch immer viel kürzer.


    So sollte dfein Script funktionieren:

    Spoiler anzeigen
    [autoit]

    #cs
    Es soll die Differenz der beiden Datumswerte in Tagen berechnet werden

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

    #CE
    #include <GuiEdit.au3>
    #include <Date.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiDateTimePicker.au3>
    Opt("GUIOnEventMode", 1)
    Opt("GUICloseOnESC", 0)

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

    $Form1 = GUICreate(@ScriptName, 500, 500, 150, 150)
    ;~ $ETag = GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 20, 175, 175,0); damit geht es
    $ETag=GUICtrlCreateDate("2010/02/13", 156, 56, 127, 24, $DTS_SHORTDATEFORMAT)
    GUICtrlCreateLabel("Start",100,58,40,17)
    $LTag=GUICtrlCreateDate("2010/02/28", 156,100, 127, 24, $DTS_SHORTDATEFORMAT)
    ;~ $LTag= GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 230, 175, 175,0); damit geht es
    GUICtrlCreateLabel("Ende",100,100,40,17)
    $diff=GUICtrlCreateInput("",156,150,40,24)
    GUICtrlCreateLabel("Differenz",90,150,50,17)
    GUICtrlSetTip(-1,"Differenz in Tagen")
    ;## Button
    Global $btn1 = GUICtrlCreateButton('Differenz berechnen', 10, 20)
    GUICtrlSetOnEvent($btn1, "_Start")
    Global $btn1 = GUICtrlCreateButton('Abbrechen', 10, 60)
    GUICtrlSetOnEvent($btn1, "_Abbrechen")
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")
    GUISetState(@SW_SHOW)

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

    Func _GUIEvents();==> Knöpfe Maximieren Minimieren Ende
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
    Case @GUI_CtrlId = $GUI_EVENT_RESTORE
    EndSelect
    EndFunc

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

    Func _Abbrechen();==> Abbruch Programm verlassen.
    Exit
    EndFunc

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

    Func _Start() ;==> Brechnung "Die nicht Funktioniert"
    _GUICtrlEdit_SetText($diff,_DateDiff("D",_DEShort2Int(GUICtrlRead($ETag)),_DEShort2Int(GUICtrlRead($LTag))))

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

    ConsoleWrite(GUICtrlRead($ETag)&@CRLF)
    ConsoleWrite(GUICtrlRead($LTag)&@CRLF)
    ConsoleWrite($diff&@CRLF)

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

    EndFunc

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

    While 1
    Sleep(50)
    WEnd

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

    Func _DEShort2Int($sDate)
    $aSplit = StringSplit($sDate, ".")
    Return StringFormat("%04i/%02i/%02i", $aSplit[3], $aSplit[2], $aSplit[1])
    EndFunc ;==>_DEShort2Int

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Dies dürfte am Format des Datums liegen.

    So klappt es

    Spoiler anzeigen
    [autoit]

    #cs
    Es soll die Differenz der beiden Datumswerte in Tagen berechnet werden

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

    #CE
    #include <GuiEdit.au3>
    #include <Date.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    #include <GuiDateTimePicker.au3>
    Opt("GUIOnEventMode", 1)
    Opt("GUICloseOnESC", 0)

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

    $Form1 = GUICreate(@ScriptName, 500, 500, 150, 150)
    ;~ $ETag = GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 20, 175, 175,0); damit geht es
    $ETag = GUICtrlCreateDate("2010/02/13", 156, 56, 127, 24, $DTS_SHORTDATEFORMAT)
    GUICtrlCreateLabel("Start", 100, 58, 40, 17)
    $LTag = GUICtrlCreateDate("2010/02/28", 156, 100, 127, 24, $DTS_SHORTDATEFORMAT)
    ;~ $LTag= GUICtrlCreateMonthCal(@YEAR & @MON & @MDAY, 300, 230, 175, 175,0); damit geht es
    GUICtrlCreateLabel("Ende", 100, 100, 40, 17)
    $diff = GUICtrlCreateInput("", 156, 150, 40, 24)
    GUICtrlCreateLabel("Differenz", 90, 150, 50, 17)
    GUICtrlSetTip(-1, "Differenz in Tagen")
    ;## Button
    Global $btn1 = GUICtrlCreateButton('Differenz berechnen', 10, 20)
    GUICtrlSetOnEvent($btn1, "_Start")
    Global $btn1 = GUICtrlCreateButton('Abbrechen', 10, 60)
    GUICtrlSetOnEvent($btn1, "_Abbrechen")
    GUISetState()
    GUISetOnEvent($GUI_EVENT_CLOSE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "_GUIEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "_GUIEvents")
    GUISetState(@SW_SHOW)

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

    Func _GUIEvents();==> Knöpfe Maximieren Minimieren Ende
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    Exit
    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
    Case @GUI_CtrlId = $GUI_EVENT_RESTORE
    EndSelect
    EndFunc ;==>_GUIEvents

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

    Func _Abbrechen();==> Abbruch Programm verlassen.
    Exit
    EndFunc ;==>_Abbrechen

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

    Func _Start() ;==> Brechnung "Die nicht Funktioniert" >>> jetzt funktionierts aber
    $ETag_neu = GUICtrlRead($ETag)
    $LTag_neu = GUICtrlRead($LTag)
    $ETag_neu = StringMid($ETag_neu, 7, 4) & "/" & StringMid($ETag_neu, 4, 2) & "/" & StringMid($ETag_neu, 1, 2)
    $LTag_neu = StringMid($LTag_neu, 7, 4) & "/" & StringMid($LTag_neu, 4, 2) & "/" & StringMid($LTag_neu, 1, 2)

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

    _GUICtrlEdit_SetText($diff, _DateDiff("D", $ETag_neu, $LTag_neu))

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

    ConsoleWrite($ETag_neu & @CRLF)
    ConsoleWrite($LTag_neu & @CRLF)
    ConsoleWrite(_DateDiff("D", $ETag_neu, $LTag_neu) & @CRLF & @CRLF)

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

    EndFunc ;==>_Start

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

    While 1
    Sleep(50)
    WEnd

    [/autoit]

    Das Datum muß im Format YYYY/MM/DD und nicht DD/MM/YYYY ausgelesen werden.
    Außerdem habe ich _GUICtrlEdit_InsertText durch _GUICtrlEdit_SetText ersetzt, da sonst die alte Differenz nicht gelöscht wird

  • Danke "Meister" SEuBo
    So funktioniert es. Den Code muss ich jetzt erstmal auf mich wirken lassen.
    Leider ließt man recht wenig über den Date Time Picker.

    Danke