Datum-Vergleich

  • Themenstarter Themenstarter Perforator
  • Beginndatum Beginndatum
P

Perforator

Das Problem ist, dass ich das Datum für bestimmte Termine in meiner DB abspeicher.
Jetzt möchte ich das er beim selektieren des Datensatzes nur diese ausgibt welche auch noch aktuell sind.
Nur wenn ich das Datum (z.B. 23.07.2004) jetzt verlgeiche, z.B. so:

PHP:
$heute = date("d.m.Y");
$check = $heute - $datum
dabei is natürlich $datum das Datum aus der DB
oder
PHP:
"SELECT * FROM termine WHERE datum >= NOW() ORDER BY datum"

Dabei rechnet er aber z.B. wenn heute der 22.07. und der Termin am 08.07. war 22 - 8 = 14 -> also gibt er nicht aus!
Nur wenn ich jetzt den 08.08. hab dann gibt er den auch nicht aus weil ihn der Monat garnicht interessiert...

Meine Idee wäre halt jetzt gewesen ich wandle das Datum was eingetragen wird um (also z.B. 22.07.2004 -> 2004-07-22) und dann nachdem es überprüft wurde wieder in das normale Datumsformat um!

Mein Frage ist jetzt: Gibt es eine einfacher Möglichkeit mein Problem zu lösen oder muss ich es umwandeln das SQL damit richtig rechnet, wenn ja wie mach ich das?

thx schonmal
 
Ich steige noch nicht wirklich durch, was Du genau meinst, bis auf dass Du nur die Einträge aus der Datenbank haben willst, wo das Datum heute ist oder in der Zukunft liegt.

Dazu kannst Du die Datenbank einfach so abfragen:

PHP:
SELECT DATE_FORMAT(datum, '%d.%m.%Y') FROM termine WHERE TO_DAYS(datum) >= TO_DAYS(NOW()) ORDER BY datum

Und dann brauchst Du eigentlich auch nicht mehr in php zu rechnen.

PS: Vorausgesetzt natürlich, dass Du das Datum nicht als Varchar, sondern als Date oder Timestamp oder so in der Datenbank abspeicherst (Typ der Spalte).
 
Das is ja des Problem...
Hab das Datum als VARCHAR(20) gespeichert, falls es mal ein datum gibt was so aussieht: 30.07.-01.08.2004 oder so...
@jenno: hast das problem schon richtig verstanden :)

wie mach ich das am besten?
 
Also, um mit nem Datum wirklich was sinnvolles anfangen zu können, würd ich diese IMMER in einem Datumsformat in der Datenbank speichern. Und wenn es bei Dir auch von/bis Daten gibt, dann machste eben zwei Spalten und zerlegst so ein Datum 30.07.-01.08.2004 in 30.07.2004 (Spalte von) und 01.08.2004 (Spalte bis).

Ansonsten kannst Du Dir vielleicht nochmal [phpf]mktime[/phpf] ansehen. Damit kannst Du Dir einen Timestamp erstellen aus den Zahlen für Tag, Monat, Jahr, Minute, Sekunde, Stunde. Du hast dann das Datum in Sekunden ab einem bestimmten Tag (irgendwann 1970). Damit kannste auch rechnen und mit [phpf]date[/phpf] kannst Du dann auch wieder zurückverwandeln.

Die Frage ist ja dann auch noch, von was willst Du überhaupt bei so einem Datum 30.07.-01.08.2004 ausgehen bei der Abfrage?
 
So, hab das Feld datum jetzt in TIMESTAMP(8) geändert.
Wenn der Termin über 2 oder mehr Tag geht dann muss der Termin halt öfters eingetragen werden, weil ich in dem Fall kein Anfang und Ende unbedingt brauche!
Jetzt möchte ich das Datum das ich bei der Eingabe im Textfeld (08.08.2004) eingebe in die datebank speichern.
Wie wandle ich das datum in den TIMESTAMP um das es richtig in der DB steht?

Wenn ich das Datum welches so: 20040808 in der DB steht, mit SELECT DATE_FORMAT(datum, '%d.%m.%Y') auslesen will zeigt er mir nix an, warum?
 
Zurück