Henrik: Nochmal: mit Datum rechnen

Morgen zusammen!

hatte leider am 13.10.keine Gelegenheit, deshalb heute erst mal vielen Dank für Eure Hilfe!
Leider klemmt's immer noch an einer Kleinigkeit. Wenn ich das richtig verstanden habe, ist das mySQL-Datumsformat YYYYMMDD, oder? Dann müsste meine Variable, mit der ich ein Zeitintervall (zB 14 Tage) rückwärts vom heutigen Tage bestimme, so aussehen:

$zeitraum = mktime (0,0,0,date("Y"), date("m"), date("d")-14);

und die Query, die alle Datensätze ausliest, deren Feld 'datum' ein Datum das >= (Heute -14 Tage) enthält, so:

[...] = mysql_query("SELECT blablabla FROM tabelle WHERE datum > $zeitraum [...]");

Leider sieht die DB das anders. Ich bekomme immmer ALLE Datensätze. :-(

Hat jemand 'ne Idee?

Danke,

Henrik

  1. Hi,

    $zeitraum = mktime (0,0,0,date("Y"), date("m"), date("d")-14);

    Du weißt schon, daß mktime() einen Unix-Timestamp zurück gibt? Sprich, die Anzahl der Sekunden
    seit dem 1. 1. 1970 0:00 Uhr.

    und die Query, die alle Datensätze ausliest, deren Feld 'datum' ein Datum das >= (Heute -14 Tage)
    enthält, so:

    [...] = mysql_query("SELECT blablabla FROM tabelle WHERE datum > $zeitraum [...]");

    Leider sieht die DB das anders. Ich bekomme immmer ALLE Datensätze. :-(

    Ich weiß nicht, welchen Datentyp dein MySQL-Feld hat, aber sollte es DATETIME oder TIMESTAMP
    oder so sein, machst du das am besten so:

    mysql_query("SELECT * FROM tabelle WHERE UNIX_TIMESTAMP(feld) > $zeitraum");

    Oder du speicherst eben direkt den Timestamp ab; aber Achtung: ein normales Integer-Feld könnte zu
    klein dafür sein (ich hab gerade nicht im Kopf, wie die Int-Range bei MySQL ist) und es könnte einen
    Überlauf geben.

    mfg
    CK1

    <img src="http://wwwtech.de/images/banner.jpg" alt="">
    http://wwwtech.de
    http://wwwtech.de/moorhuhn/

    1. Moinz,

      Oder du speicherst eben direkt den Timestamp ab; aber Achtung: ein normales Integer-Feld könnte zu
      klein dafür sein (ich hab gerade nicht im Kopf, wie die Int-Range bei MySQL ist) und es könnte einen
      Überlauf geben.

      1. Moinz,

        uups, da hib ich wohl aus Versehen auf Enter gedrückt ;-)
        nunja, passiert halt mal.

        » Oder du speicherst eben direkt den Timestamp ab; aber Achtung: ein normales Integer-Feld könnte zu
        » klein dafür sein (ich hab gerade nicht im Kopf, wie die Int-Range bei MySQL ist) und es könnte einen
        » Überlauf geben.

        Genau so mache ich es immer. Der Standard-INT ist dafür zu klein. Ich nehme da eine bigint(11) und es gibt keine Probleme.

        Markus

        1. Ach Jungs,

          ich bin ja so glücklich *freu*. Es funzt! Und das war so einfach zu bewerkstelligen, dasss es mir fast peinlich ist.
          Nachdem nix mehr ging, habe Ich einfach als Argument in der Query

          WHERE $datum >= now() -yyyymmddhhmmss

          probiert - und das war's.

          Nochmal heißen Dank für Eure Hilfe, die mich (auf Umwegen) ans Ziel gebracht hat :-)

          Grüße, Henrik

  2. Hallo Hendrik

    um dir weiter helfen zu können, wäre es interessant zu wissen
    welches Format du in deinem "datum"- feld in der Datenbank benutzt.

    Andi

    1. Hi Andi,

      ich benutze YYYYMMDD

      Henrik

  3. Hallo Hendrik

    so müsste es funzen

    $zeitraum = mktime (0,0,0,date("Y"), date("m"), date("d")-14);

    $zu_alt=date ("Y m d" , $zeitraum);

    [...] = mysql_query("SELECT blablabla FROM tabelle WHERE datum > $zu_alt [...]");

    Andi

  4. Hallo Henrik,

    $zeitraum = mktime (0,0,0,date("Y"), date("m"), date("d")-14);

    Da ich gerade mich gerade gestern erst mit mktime() rumgeschlagen habe, bin ich mir ziemlich sicher, das die Reihenfolge der Angaben Stunde,Minute,Sekunde,Monat,Tag,Jahr lauten muss.
    Zur Bestätigung habe ich nochmal einen Auszug aus der PHP-Hilfe (PHP3-Handbuch) kopiert:

    ==========
    int mktime (int Stunde, int Minute, int Sekunde, int Monat, int Tag, int Jahr [, int is_dst])

    Warnung: Beachten sie die andersartige Anordnung der Argumente. Diese unterscheidet sich von der Reihenfolge des UNIX-Befehls mktime(). Das ist eine häufige Fehlerursache in Scripts.

    Gibt den UNIX Timestamp/Zeitstempel an Hand der gegebenen Argumente zurück. Der Zeitstempel ist ein long-integer-Wert, der die Anzahl der Sekunden zwischen der UNIX Epoche (01.01.1970) und der angegebenen Zeit enthält.

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html