Datum vergleichen funzt nicht richtig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datum vergleichen funzt nicht richtig

    Hallo,
    ich habe ein Problem bei meiner Suchen-Funktion hinsichtlich der Datumsuche.

    Wenn ich z.b. als Datum den 31.03.2009 drin habe und suche nach >= 30.03.2009 findet er den Eintrag einwandfrei
    - 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)

    Grundproblem: Das "Datum" ist ein 'String' - kein 'date', die Einträge werden jedoch über 'strtotime' angezeigt bzw. ausgegeben:
    PHP-Code:
    {echo date("d.m.Y"strtotime($row["a_dat"]));} 
    Gesucht und verglichen werden sie mit folgendem Code:
    PHP-Code:
    if($a_dat1!="" && $a_dat2!="" )
    {
    $where .= "and a_dat >= 'a_dat1' and a_dat <= 'a_dat2'"; } 
    Frage: Kann/Muss ich in dem o.g. suchen/vergleichen-Code das "strtotime" irgendwie mit reinbringen,
    sodass er keine 2 Strings vergleicht sondern 2 Datums/Daten/Datümmer?

  • #2
    Re: Datum vergleichen funzt nicht richtig

    Original geschrieben von Lavingstar
    Grundproblem: Das "Datum" ist ein 'String'
    Wenn du das Problem bereits erkannt hast - wieso vermeidest du es dann nicht?
    - kein 'date',
    Was soll "ein date" sein?
    Sofern du nicht das Paarungsritual meinst, druecke dich bitte genauer aus.


    die Einträge werden jedoch über 'strtotime' angezeigt bzw. ausgegeben
    Warum?

    Frage: Kann/Muss ich in dem o.g. suchen/vergleichen-Code das "strtotime" irgendwie mit reinbringen,
    sodass er keine 2 Strings vergleicht sondern 2 Datums/Daten/Datümmer?
    Antwort: Vergleiche Daten wann immer moeglich in ihrer urspruenglichen Form, und nicht in irgendeiner "formatierten".
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      @wahsaga: Ich merke an deinen Antworten (auch in anderen Posts) dass du heute wohl nicht gut drauf bist. Ich möchte dich daher bitten entweder konstruktiv und vor allem objektiv auf meine Fragen zu antworten, oder es sein zu lassen. Mich für meine bisherigen Programmierungen zu rechtfertigen mache ich normalerweise nicht, aber der Verständlichkeit wegen hier die Antwort zu deinen Fragen:

      1. Weil ich weder die Variablen noch die Felder der bestehenden Datenbank umschreiben und damit noch mehr Probleme erzeugen möchte

      2. Date => http://www.php.net/date (ich wäre sehr überrascht wenn diese Frage ernst gemeint war - ich schliesse sie mal zurück auf deine negative Konditionierung)

      3. Damit ich sie eingeben kann als tt.mm.jjjj und ausgeben kann als tt.mm.jj sofern dies erwünscht ist

      4. Lässt sich hier aber leider nicht anders machen, da das Datum "string" ist und ich 2 Strings schlecht mit <>= vergleichen kann. Darum möchte ich sie als Datum in der date()-Funktion miteinander vergleichen

      Kommentar


      • #4
        Nein, er hat einfach recht.
        Datum als varchar statt als date in der Datenbank zu speichern ist einfach nur dämlich und wird dir noch viel mehr Probleme machen als das hier.

        Spätestens wenn auf einmal die Performanz suckt...

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          PHP-Code:
          date("Ymd"
          dann hast du Zahlenwerte die du mit größer/kleiner überprüfen kannst. ist zwar pfuschig, aber du willst es ja nicht anders

          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Original geschrieben von ghostgambler
            Nein, er hat einfach recht.
            Datum als varchar statt als date in der Datenbank zu speichern ist einfach nur dämlich und wird dir noch viel mehr Probleme machen als das hier.
            Hmm ... reicht es denn wenn ich einfach das Feld "a_dat" in der Datenbank von VARCHAR auf DATE umstelle? Oder muss ich dazu noch im PHP-Code irgendwas ändern bei den Variablen?

            Kommentar


            • #7
              Die Queries müssen geändert werden, die müssen ungefähr so aussehen:
              INSERT INTO tabelle (Datum) VALUES("2008-02-31");

              Beim Auslesen musst du das Datum umformatieren, das geht z.B. so
              SELECT *, UNIX_TIMESTAMP(Datum) Datum FROM tabelle;
              und dann
              PHP-Code:
              echo date("d.m.Y"$row["Datum"]); 
              oder auch ohne UNIX_TIMESTAMP im Query, dafür noch ein strtotime() um $row["Datum"] drumherum.

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                Original geschrieben von Lavingstar
                @wahsaga: Ich merke an deinen Antworten (auch in anderen Posts) dass du heute wohl nicht gut drauf bist. Ich möchte dich daher bitten entweder konstruktiv und vor allem objektiv auf meine Fragen zu antworten, oder es sein zu lassen.
                Ich antworte so, wie ich es fuer richtig halte.
                Und wenn jemand Unsinn schreibt oder Unsinn programmiert, dann weise ich ihn darauf hin - ob's ihm nun passt, oder nicht.

                Mich für meine bisherigen Programmierungen zu rechtfertigen mache ich normalerweise nicht
                Jeder Programmierer sollte sein Vorgehen in dem Sinne "rechtfertigen" koennen, dass er jeweils darlegen kann, warum eine bestimmte Variante gewaehlt wurde, warum gewisse Nachteile dieser ggf. in Kauf genommen wurden, etc.
                1. Weil ich weder die Variablen noch die Felder der bestehenden Datenbank umschreiben und damit noch mehr Probleme erzeugen möchte
                Symptome zu bekaempfen, statt Ursachen abzustellen, war schon immer bloedsinnig.

                2. Date => http://www.php.net/date (ich wäre sehr überrascht wenn diese Frage ernst gemeint war - ich schliesse sie mal zurück auf deine negative Konditionierung)
                Natuerlich war die Frage ernst gemeint.

                Was du jetzt verlinkt hast, ist eine PHP-Funktion, mit der sich ein Datum auf die unterschiedlichsten Arten darstellen und formatieren laesst.
                Zu behaupten, das gewaehlte Speicherformat waere "ein date", ist also nach wie vor hoechst unsinnig.

                Unterlasse bitte deine "Rueckschluesse" - sonst fange ich auch mal damit an.
                3. Damit ich sie eingeben kann als tt.mm.jjjj und ausgeben kann als tt.mm.jj sofern dies erwünscht ist
                Auch keine - sinnvolle - Antwort auf die Frage.

                Auch die Datenbank selber kann ein Datum bereits formatiert zurueckliefern - wenn man es in ihr denn erst mal in einem sinnvollen Format ablegen wuerde.
                4. Lässt sich hier aber leider nicht anders machen, da das Datum "string" ist und ich 2 Strings schlecht mit <>= vergleichen kann.
                Abgesehen davon, dass man das durchaus "kann" -
                Darum möchte ich sie als Datum in der date()-Funktion miteinander vergleichen
                - auch das ist wieder absolut unnoetig, wenn Datenbank-seitig ein vernuenftiger Feldtyp gewaehlt wird.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  wahsaga

                  "wenn wenn wenn wenn .... "
                  Antworte einfach nicht mehr auf meine Threads und gut ist.

                  Kannst dich ja mal an den Antworten von ghostgamblern orientieren der mir trotz meiner unprofessionellen und fehlerhaften Fragestellung erheblich weiterhelfen konnte.
                  ------------------------------------------------


                  @ghost:

                  Vielen Dank für deine Hilfe, werde die Vorschläge direkt mal ausprobieren.

                  Kommentar

                  Lädt...
                  X