Zeitdifferenz zwischen TIMESTAMP und time()

Hallo,

ich habe eine MySQL-Tabelle, in welcher ein Feld mit einem Timestamp beinhaltet ist, welcher bei der Erstellung des Datensatzes automatisch erzeugt wird. Nun würde ich gerne irgendwie die Differenz zwischen jetzt und diesem Timestamp ermitteln.
Mit

time() - $Timestamp

bin ich leider auf keinen grünen Zweig gekommen, da beide anscheinend einen anderen „0-Punkt“ haben. Es kommt zwar eine Differenz heraus, die aber nichts mit der Zeitdifferenz zu tun hat.

Wer kann mir hier einen Tip geben?

Gruß

Thomas

Hallo,

ich habe eine MySQL-Tabelle, in welcher ein Feld mit einem
Timestamp beinhaltet ist, welcher bei der Erstellung des
Datensatzes automatisch erzeugt wird. Nun würde ich gerne
irgendwie die Differenz zwischen jetzt und diesem Timestamp
ermitteln.
Mit

time() - $Timestamp

bin ich leider auf keinen
grünen Zweig gekommen, da beide anscheinend einen anderen
„0-Punkt“ haben. Es kommt zwar eine Differenz heraus, die aber
nichts mit der Zeitdifferenz zu tun hat.

das mysql timestamp ist im format „2007-01-29 23:12:56“ die php time()-funktion gibt einen unix-zeitstempel aus. was dann als differenz zw. dem string aus mysql und dem int aus php kommt, ist wohl nicht sinnvoll zu behandeln.

Wer kann mir hier einen Tip geben?

tip: benutze das manual
http://www.mysql.org/doc/refman/5.1/de/functions.html
in dem falle sogar:
http://www.mysql.org/doc/refman/5.1/de/date-and-time…

und dann musst du dich entscheiden die differenz mit einer *_diff funktion in mysql zu loesen, oder ueber die mysql-funktion unix_timestamp() und den php-befehl time() die anzahl der sekunden in der applikation weiter zu bearbeiten.

Hallo,

das mysql timestamp ist im format „2007-01-29 23:12:56“ die
php time()-funktion gibt einen unix-zeitstempel aus. was dann
als differenz zw. dem string aus mysql und dem int aus php
kommt, ist wohl nicht sinnvoll zu behandeln.

in PHP kann ich das wohl behandeln, aber ich möchte das Ding ja gleich schon mal in der SQL-Abfrage in Griff bekommen.

tip: benutze das manual
http://www.mysql.org/doc/refman/5.1/de/functions.html
in dem falle sogar:
http://www.mysql.org/doc/refman/5.1/de/date-and-time…

da drin hab ich auch schon mehrfach gestöbert. Nur wirklich schlau geworden bin ich dabei nicht. Irgendwie kommen bei mir da die komischten Ergebnisse heraus. Dabei will ich doch nur die Datensätze herausfiltern, die mindestens 15 Minuten alt sind.

und dann musst du dich entscheiden die differenz mit einer
*_diff funktion in mysql zu loesen, oder ueber die
mysql-funktion unix_timestamp() und den php-befehl time() die
anzahl der sekunden in der applikation weiter zu bearbeiten.

Hm, ich muß ehrlich zugeben, ich stehe auf der Leitung und sehe den Wald vor lauter Bäumen nicht. :frowning:

Gruß

Thomas

Hi Thomas,

Nun würde ich gerne
irgendwie die Differenz zwischen jetzt und diesem Timestamp
ermitteln.

dog.je hat bereits richtig angemerkt, dass PHP time() einen Unix-Timestamp erzeugt. Es gibt in MySQL die Funktion FROM_UNIXTIME um einen Unix-Timestamp in einen MySQL-Timestamp zu konvertieren.

Sagen wir das Feld mit der Timestamp heißt ‚created‘ in der Tabelle ‚visits‘. Du möchtest Die vergangenen Sekunden ermitteln, zwischen jetzt und created:

$query = 'SELECT TIME\_TO\_SEC(TIMEDIFF(FROM\_UNIXTIME('.time().'), created)) FROM visits';

Eigentlich brauchst Du time() nicht, da es auch NOW() gibt, welches die aktuelle Serverzeit zurückgibt.

$query = 'SELECT TIME\_TO\_SEC(TIMEDIFF(NOW(), created)) FROM visits'; 

Ciao,
Rudy

Hi Rudy,

dog.je hat bereits richtig angemerkt, dass PHP time() einen
Unix-Timestamp erzeugt. Es gibt in MySQL die Funktion
FROM_UNIXTIME um einen Unix-Timestamp in einen MySQL-Timestamp
zu konvertieren.

Diese Funktion hatte ich auch noch gefunden.

Sagen wir das Feld mit der Timestamp heißt ‚created‘ in der
Tabelle ‚visits‘. Du möchtest Die vergangenen Sekunden
ermitteln, zwischen jetzt und created:

$query = ‚SELECT
TIME_TO_SEC(TIMEDIFF(FROM_UNIXTIME(‘.time().’), created)) FROM
visits’;

Eigentlich brauchst Du time() nicht, da es auch NOW() gibt,
welches die aktuelle Serverzeit zurückgibt.

$query = ‚SELECT TIME_TO_SEC(TIMEDIFF(NOW(), created)) FROM
visits‘;

Das Beispiel finde ich gut. Dieses „timediff“ hatte ich nämlich dabei vergessen und hab einfach " -" hergenommen. Somit ist nur noch „Mist“ herausgekommen.

Danke Dir.

Gruß

Thomas

Hi Rudy,

$query = ‚SELECT TIME_TO_SEC(TIMEDIFF(NOW(), created)) FROM
visits‘;

bringt mir wunderbar die verstrichene Zeit seit Erzeugung des Datensatzes. Wenn ich nun aber alle Datensätze abfragen will, die mindestens 15 Minuten alt sind, schreibe ich das ganze dann folgendermaßen um:

$query = 'SELLECT \* FROM visits WHERE (TIMEDIFF(NOW(), created)) \> 900'

Allerdings funktioniert das wieder mal nicht. Wo habe ich jetzt den Gedankenfehler dabei?

Gruß

Thomas

Hi Thomas,

SELECT * FROM visits WHERE (TIMEDIFF(NOW(),created)) > 900’
Allerdings funktioniert das wieder mal nicht. Wo habe ich
jetzt den Gedankenfehler dabei?

Achtung, TIMEDIFF gibt Dir die Differenz als einen Zeitwert zurück, nicht in Sekunden. Du musst das Ergebnis der Funktion TIMEDIFF() noch mittels TIME_TO_SEC in Sekunden umwandeln, um den Vergleich mit dem Sekundenwert durchführen zu können.

SELECT \* FROM visits WHERE TIME\_TO\_SEC(TIMEDIFF(NOW(), created)) \> 900

Mit MySQL 5 geht auch das hier:

SELECT \* FROM visits WHERE TIMESTAMPDIFF(SECOND, created, NOW()) \> 900

Ciao,
Rudy

1 Like

Hi Rudy,

danke für diese Info. So hat es geklappt.

Gruß

Thomas