Datum mit anderem Datum vergleichen

  • Hallo zusammen,

    ich habe aktuell ein Datumsformal gewählt, das ich als String angebe, mit dem ich das Datum vergleichen kann (yyyy.mm.dd / hh:mm:ss

    gibt es eine Möglichkeit das Datum auf zu vergleichen
    wenn ich das deutsche Formal dd.mm.yyyy / hh:mm:ss verwenden will?

    Der Vergleich soll jedesmal nur richtig angeben, welches von beiden Daten neuer ist.


    Danke schonmal

    Einmal editiert, zuletzt von tztztz (22. Mai 2014 um 11:00)

  • Konvertiere sie in UNIX-Timestamps und schaue dann welches der beiden größer ist, das ist das neuere ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Ich hab mal ne kleine Funktion geschrieben. Probier sie einfach mal aus. Die FUnktion gibt jeweils das neuere Datum wieder. Sind beide Daten gleich gibt sie den String "Die Daten sind gleich" aus.

    Ich hoffe, ich konnte dir helfen!

    Code:

    Spoiler anzeigen
    [autoit]

    msgbox(48,"",_newestData("01.01.2014 / 10:00:00","01.01.2014 / 10:00:00"))

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

    Func _newestData($data1,$data2)
    $data1=stringreplace($data1," ","")
    $data1Ar=stringsplit($data1,"/")
    $data2=stringreplace($data2," ","")
    $data2Ar=stringsplit($data2,"/")
    $date1Ar=stringsplit( $data1Ar[1] ,".")
    $time1Ar=stringsplit( $data1Ar[2] ,":")
    $date2Ar=stringsplit( $data2Ar[1] ,".")
    $time2Ar=stringsplit( $data2Ar[2] ,":")
    if $date1Ar[3]<$date2Ar[3] then
    return $data2
    elseif $date1Ar[3]>$date2Ar[3] then
    return $data1
    else
    if $date1Ar[2]<$date2Ar[2] then
    return $data2
    elseif $date1Ar[2]>$date2Ar[2] then
    return $data1
    else
    if $date1Ar[1]<$date2Ar[1] then
    return $data2
    elseif $date1Ar[1]>$date2Ar[1] then
    return $data1
    else
    if $time1Ar[1]<$time2Ar[1] then
    return $data2
    elseif $time1Ar[1]>$time2Ar[1] then
    return $data1
    else
    if $time1Ar[2]<$time2Ar[2] then
    return $data2
    elseif $time1Ar[2]>$time2Ar[2] then
    return $data1
    else
    if $time1Ar[3]<$time2Ar[3] then
    return $data2
    elseif $time1Ar[3]>$time2Ar[3] then
    return $data1
    else
    return "Die Daten sind gleich"
    endif
    endif
    endif
    endif
    endif
    endif
    EndFunc

    [/autoit]
  • mach doch ein StringSplit und lass die ausgegebene Array überprüfen welches höher ist

    func _CHK (Date1, Date2)
    local $D1 = Stringsplit (Date1,".:")
    local $D2 = Stringsplit (Date2,".:")


    if $D1[1] > $D2[1] then
    return 1
    elseif $D1[2] > $D1[1] then
     return 2
    endif


    und das halt für alle ArrayStellen
    endfunc

  • Danke, auf die Idee bin ich nicht gekommen.

    Ich hatte überlegt das Datum so zu vergleichen danach das "richtige" mit Stringsplit aufzutrennen und dann neu zusammenzusetzen.
    War halt aufgrund nicht einheitlichre Trennzeichen nciht möglich.

  • Du kannst auch die

    [autoit]

    _DateDiff

    [/autoit]


    UDF benutzen, wie mir gerade einfiel. Das müsste deutlich schneller gehen ;)

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal