Problem bei Datums-Vergleich

  • [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Hallo,[/FONT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]ich habe ein Problem bei meiner Suchen-Funktion hinsichtlich der Datumsuche.[/FONT]

    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Wenn ich z.b. als Datum den 31.03.2009 drin habe und suche nach >= 30.03.2009 findet er den Eintrag einwandfrei -[/FONT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]suche ich jedoch nach <=01.04.2009 kann er den Eintrag vom 31.03.2009 nicht finden (findet dafür aber bspw. Einträge vom 01.03.2009)[/FONT]

    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Grundproblem: Das "Datum" ist ein 'String' - kein 'date', die Einträge werden jedoch über 'strtotime' angezeigt bzw. ausgegeben:[/FONT]

    [INDENT][FONT=verdana, geneva, arial, helvetica, sans-serif]PHP:[/FONT]{echo date("d.m.Y", strtotime($row["a_dat"]));}
    [/INDENT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Gesucht und verglichen werden sie mit folgendem Code:[/FONT]
    [INDENT][FONT=verdana, geneva, arial, helvetica, sans-serif]PHP:[/FONT]if($a_dat1!="" && $a_dat2!="" ){$where .= "and a_dat >= 'a_dat1' and a_dat <= 'a_dat2'"; }
    [/INDENT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Frage: Kann/Muss ich in dem o.g. suchen/vergleichen-Code das "strtotime" irgendwie mit reinbringen,[/FONT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]sodass er keine 2 Strings vergleicht sondern 2 Datums/Daten/Datümmer? [Blockierte Grafik: http://php-resource.de/forum/images/smilies/smile.gif][/FONT]

  • [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif][/FONT][FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Grundproblem: Das "Datum" ist ein 'String' - kein 'date'[/FONT]


    Und warum bringst du das nicht erst mal in Ordnung, anstatt immer wieder mit diesen Problem zu kämpfen? Du schraubst an der falschen Stelle rum.

  • Und warum bringst du das nicht erst mal in Ordnung, anstatt immer wieder mit diesen Problem zu kämpfen? Du schraubst an der falschen Stelle rum.



    Ich habs mal probiert und das Feld "a_dat" von VARCHAR auf DATE umgestellt, aber danach hat das Datum gar nicht mehr gestimmt und ich weiss leider momentan nicht, wie ich es anstellen kann, dass das Datum dann nicht als 2009-10-02 sondern als 10.02.2009 angezeigt wird.
    Ich weiss zwar dass es einen Befehl date(d.m.Y) gibt aber den hab ich entweder nicht richtig implementiert oder ich hab noch irgendwas vergessen ... :-/


  • [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]Wenn ich z.b. als Datum den 31.03.2009 drin habe und suche nach >= 30.03.2009 findet er den Eintrag einwandfrei -[/FONT]
    [FONT=Verdana, Geneva, Arial, Helvetica, sans-serif]suche ich jedoch nach <=01.04.2009 kann er den Eintrag vom 31.03.2009 nicht finden (findet dafür aber bspw. Einträge vom 01.03.2009)[/FONT]

    Wenn du Strings vergleicht beginnt das vorne. In deinem Datumsformat steht vorne der Tag, also wird der erstmal verglichen. Da ist dann 31 größer als 30, klappt also, er würde dir aber auch z.B. den 31.01.1781 als > 30.03.2009 ausspucken.
    Wenn du das Datum als String vergleichen willst mußt du es schon richtig herum schreiben, in der Form YYYY-MM-DD.
    Dann klappt das auch.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Wenn du Strings vergleicht beginnt das vorne. In deinem Datumsformat steht vorne der Tag, also wird der erstmal verglichen. Da ist dann 31 größer als 30, klappt also, er würde dir aber auch z.B. den 31.01.1781 als > 30.03.2009 ausspucken.
    Wenn du das Datum als String vergleichen willst mußt du es schon richtig herum schreiben, in der Form YYYY-MM-DD.
    Dann klappt das auch.



    Hmm...das klingt allerdings sehr logisch :)
    Ok, also muss ich beim suchen/vergleichen die beiden Datümmer(?) "formatieren"?

  • Ein Datum, zwei Daten. ;)

    Du solltest trotzdem auf den Typ date gehen. Erstelle eine Spalte vom Type date, lese per Script die Daten ein, konvertiere passend und speichere es in die neue Tabellenspalte (Aufwand von ca. 10 Min.). Dann experimentierst du mit der neuen Tabellenspalte und wenn alles funktioniert, haust du die alte (und kaputte) Spalte weg.

  • Das klingt gut, hab ja die version 2 mal (einmal zum austesten, einmal eine die schon in Anwendung ist).

    - Erstelle eine Spalte vom Type date => Kein Problem
    - Lese per Script die daten ein / konvertiere passend / und speichere in die neue Spalte

    => Nur die Daten aus dem Feld "a_dat"? Wie geht das?
    Über phpmyAdmin kann ich nur die komplette Tabelle exportieren/importieren
    Aber wie kann ich die Daten aus einem einzigen Feld einer Tabelle im-/exportieren?
    Und mit welchem Befehl kann ich konvertieren?

  • Konvertierung des Datums (ungetestet):

    Einmal editiert, zuletzt von bandit600 (10. Februar 2009 um 14:39)