Nochmal: mit Datum rechnen
Henrik
- php
0 Christian Kruse0 Andi Meran0 Henrik
0 Andi Meran0 AlexBausW
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
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/
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.
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
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
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
Hi Andi,
ich benutze YYYYMMDD
Henrik
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
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.
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html