Datum berechnen

  • Moin,
    Ich bin gerade dabei mich etwas näher mit AutoIt zu beschäftigen und stoße gerade auf ein "kleines" Problem.
    Ich automatisiere gerade eine Auswertung indem ich mit MouseMoves Formulare ausfülle etc.
    Nun befindet sich in einer Spalte zum Vergleichen immer das aktuelle Datum und ich möchte mit der vorherigen Woche
    vergleichen, also:
    Vergleich von: 11.08.11
    Vergleich bis: 18.08.11

    Nun die Frage wie ich das aktuelle Datum einfach minus Sieben Tage berechnen kann, immerhin gibt es auch Montaswechsel etc.

    Hab auch sonst gedacht die aktuelle Kalenderwoche minus 1 zu rechnen und dort
    zumindest immer den ersten Montag hineinschreibe, aber wie könnte AutoIT mir die KW 32 in 08.11 - 14.08 übersetzen?

    Danke für eure Hilfe und freu mich auf die Zusammenarbeit hier im Forum! :)

    Einmal editiert, zuletzt von dRoZ (19. August 2011 um 10:12)

  • Hab sowieso grade an einer Datumskonvertierung gearbeitet, schau dir mal die Funktion von mir an, vielleicht hilft sie dir.

    Spoiler anzeigen
    [autoit]

    ; #FUNCTION# ;===============================================================================
    ;
    ; Name...........: _DateWeekISOtoDate
    ; Description ...: Liefert die Tage der gewählten Kalenderwoche
    ; Syntax.........: _DateWeekISOtoDate($iKW, $iYear = @YEAR)
    ; Parameters ....: $iKW - Die Kalenderwoche, dessen Tage gesucht werden sollen
    ; $iYear - Das Jahr (Standart = Aktuelles Jahr)
    ; Return values .: Success - Eindimensionales Array mit den Tagen der gesuchten Woche.
    ; - In $Result[0] steht die Anzahl an Wochen des Jahres
    ; Failure - Returns 0 and Sets @Error:
    ; |0 - Kein Fehler
    ; |1 - $iKW ist keine Zahl
    ; |2 - $iKW ist kleiner 1 oder größer 53
    ; |3 - $iKW ist 53, es gibt aber nur 52 Wochen
    ; |4 - $iYear ist keine Zahl
    ; |5 - $iYear ist kein Jahr
    ; Author ........: TheLuBu ([email='LuBu@veytal.com'][/email])
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........;
    ;
    ; ;==========================================================================================
    Func _DateWeekISOtoDate($iKW, $iYear = @YEAR)
    If Not StringIsDigit($iKW) THen Return SetError(1,0,0)
    If $iKW = 0 Or $iKW > 53 Then Return SetError(2,0,0)
    If Not StringIsDigit($iYear) THen Return SetError(4,0,0)
    If Not StringLen($iYear) = 4 THen Return SetError(5,0,0)
    Local $s4thjanuary, $s1thjanuary, $idatereduce, $iMaxWeeks, $asReturndate[8]
    $s4thjanuary = _DateToDayOfWeek($iYear, "01", "04")
    $s1thjanuary = _DateToDayOfWeek($iYear, "01", "01")
    For $i = 1 To 6
    $idatereduce = $s4thjanuary - $i
    If $idatereduce = 2 Then ExitLoop
    Next
    $sFirstDayWeekISO = _DateAdd("D", -$i, $iYear & "/01/04")
    Switch $s1thjanuary
    Case 5 ;Donnerstag
    $iMaxWeeks = 53
    Case 4 ;Mittwoch
    If _DateIsLeapYear($iYear) Then
    $iMaxWeeks = 53
    Else
    $iMaxWeeks = 52
    EndIf
    Case Else
    $iMaxWeeks = 52
    EndSwitch
    If $iMaxWeeks = 52 And $iKW = 53 Then SetError(3,0,0)
    $asReturndate[0] = $iMaxWeeks
    For $i = 1 To 7
    $asReturndate[$i] = _DateAdd("w", $iKW - 1, _DateAdd("D", $i-1, $sFirstDayWeekISO))
    Next
    Return $asReturndate
    EndFunc ;==>_DateWeekISOtoDate

    [/autoit]
  • Super, hat geklappt.
    Jetzt bin ich gerade noch halbwegs am überlegen wie ich das Datum folgendermassen ausgeben kann:
    TT.MM.JJJJ


    Mir ist bewusst das dies mit einem Split funktioniert, jedoch gibt er mein Ergebnis leider nicht aus :(

    [autoit]


    $date = _DateAdd('w', -1, _NowCalcDate())
    $split = Stringsplit(GUICtrlRead($date), ".")
    ;$split = Stringsplit(GUICtrlRead($date), "/") funktioniert leider auch nicht.

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

    Send($split[3] & "." & $split[2] & "." & $split[1])

    [/autoit]

    Bringe ich gerade was durcheinander oder warum funktioniert das nicht wie gewünscht? ;)

  • [autoit]

    $date = _DateAdd('w', -1, _NowCalcDate())
    ;$split = Stringsplit(GUICtrlRead($date), ".") ;Wieso GuictrlRead, ist doch kein Gui Control
    $split = Stringsplit($date, "/") ;probiers mal so
    Send($split[3] & "." & $split[2] & "." & $split[1])

    [/autoit]
  • Okay, das passiert wenn man zu viel Copy&Paste aus dem Netz benutzt ohne sich damit ausgehend beschäftigt zu haben.
    Funktioniert soweit!
    Vielen Dank :)

  • hallo zusammen,

    da ich auch mit einem ähnlichen problem mich rumschlage, dachte ich, passt es gut in diesen thread.

    folgendes:

    mein problem ist der output von $yesterday...die dateadd funktion entfernt die nullen im neuen datum:

    $today = 02-04-2014
    $yesterday= 2-3-2014

    wie kann ich das format beibehalten zur weiteren verarbeitung?

    danke für allfällige tipps!