Daten vergleichen in PHP geht nicht?
Hallo.
Das Vergleichen (größer/kleiner) geht nicht, das ist mir bewusst. Deshalb formatiere ich die Strings zu einem Datum. Vergleichen geht trotzdem nicht.
Die Variable $user2_last_seen ist aus der Datenbank ausgelesen und $date2 ist das jetzige Datum, genau so formatiert wie das aus der Datenbank.
Hier mein Code:
$user2_last_seen = $row["last_seen"];
$date = date("Y-m-d H:i:s", time() - 30);
$date2 = date("Y-m-d H:i:s", $user2_last_seen);
if ($date < $date2) {
}
Ich möchte, dass er die Zeiten vergleicht und wenn das aus der Datenbank älter ist, als das $date2, dann soll er etwas machen.
5 Antworten
Warum holst du dir aus der Datenbank nicht mit UNIX_TIMESTAMP() einen Timestamp und vergleichst es damit?
Für dein Beispiel:
SELECT *,UNIX_TIMESTAMP(last_seen) AS last_seen_time FROM …
Und dann hast du in $row['last_seen_time'] eben einen Timestamp.
Siehe dazu auch:
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html
Geht nicht ist keine gute Fehlerbeschreibung. Entweder das Skript bricht mit einer Fehlermeldung ab oder es besteht ein logisches Problem.
Mit strtotime kannst du die Strings in Zeitstempel konvertieren und dann mit den mathematischen Operatoren vergleichen. Lies für Weiteres hier.
strings möchtest du mit strcmp vergeleichen. < wandelt vorher in Zahlen um.
Entschuldigung. Du hast Recht. Gerade nachgelesen und für ziemlich mies und inkonsistent befunden.
[1234] vs [ 1234]
string(4) "1234"
string(5) " 1234"
EQUAL !
[1234] vs [1234 ]
string(4) "1234"
string(5) "1234 "
DIFFERENT !
ja, php halt. Immer wieder für ein WTF gut. Das ist schon eine liebevoll vermurkste Sprache. ;-)
benutze timestamps, das sind Datumsangaben in sekunden
Was steht in $row["last_seen"] ? Wenn das eine DATETIME Spalte in mySQL ist, kommt da schon mm/dd/yyyy hh:ii:ss raus (oder so ähnlich). Das dann nochmal mit date() umwandeln ist Blödsinn.
Lasse dir von der DB (im Beispiel mysql) direkt einen UNIX_TIMESTAMP geben, also z.B. SELECT UNIX_TIMESTAMP(last_seen) as last_seen FROM ... , dann sollte das gehen. Allerdings kannst du dann auch gleich if($row['last_seen'] > (time() -30)) abfragen und das Ganze umwandeln sparen.
Alternativ lässt du dir gleich nur die passenden Datensätze von der DB liefern:
SELECT ... WHERE last_seen > (DATE_SUB(NOW(), INTERVAL 30 SECOND))
das proplem ist das ich mehrere dinge in der DB auslese mit der abfrage und nicht NUR den timestamp
ich frage alles von dem user ab und nicht nur den timestamp