• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL + Interval und auch PHP strtotime geben kein datetime aus

aJunkie

Mitglied
Hallo,

ich mache scheinbar was falsch, denn ich bekomme es irgendwie nicht hin, eine Zeit, zum Beispiel jetzt, + 30 Minuten später auszugeben.
Ich habe es mit SQL, aber auch rein mit PHP versucht. Meistens kommt entweder nur eine eins raus oder eine bis zu 4 stelligen Zahl, was kein Datetime ist.

Versuche waren ungefähr:
PHP:
<?php
echo strtotime('".$userInfo['lastActivity']."', + 30 MINUTE); # in verschiedenen Varianten

# MySQL
echo mysql_query("SELECT '".$userInfo['lastActivity']."' + INTERVAL 30 MINUTE"); # oder auch
echo mysql_query("SELECT DATE_ADD('".$userInfo['lastActivity']."', + INTERVAL 30 MINUTE)");
?>
und so weiter... aber es kommt kein Datetime raus.
In $userInfo['lastActivity'], welches ich mit mysql_fetch_assoc oder mysql_fetch_array aus der Datenbank hole, sieht beispielsweise so aus: 2010-12-10 10:38:03

Was läuft hier falsch?
 
Was willst du denn erreichen? DATE_ADD ist in erster Linie für Abfragen notwendig, um die Ausgabe zu formatieren gibt es andere Funktionen, allerdings finde ich es seltsam einen Wert bei der abfrage zu ändern um ihn dann an zu zeigen.
 
Ne, ganz so merkwürdig ist es nicht.

lastActivity ist der letzte Request des Users, der in der Datenbank gespeichert wird.
Und ich möchte diesen Wert + 30 Minuten anzeigen, damit der User weiß, wie lange der Login noch gültig ist.

Sieht man zum Beispiel oft bei Online Banking: "Session gültig bis"... Damit man einfach Bescheid weiß.

So... lastActivity ist also variabel. Es ändert sich bei jeder neuen Anfrage



Habe es aber leider so unelegant hinbekommen:
PHP:
        $v =  mysql_query("SELECT '".$userInfo['lastActivity']."' + INTERVAL 30 MINUTE"); # oder auch
        $r = mysql_fetch_row($v);
        echo $r[0];
 
Nach 1 Minute Googlen hab ich schon das Ergebnis bekommen.
Arbeite mit der PHP-Funktion time( );, die die Zeit in Millisekunden von 00:00:00 1. Januar 1970 bis die jetzige Millisekunde zurückliefert:
PHP:
<?php
var now = time( );
var then = now + ( 30 * 60 * 1000 );
?>
Dann darf $userInfo[ "lastActivity" ]; aber kein Timestamp mehr sein, sondern eben die Zeit in Millisekunden.
 
Ne, ganz so merkwürdig ist es nicht.

lastActivity ist der letzte Request des Users, der in der Datenbank gespeichert wird.
Und ich möchte diesen Wert + 30 Minuten anzeigen, damit der User weiß, wie lange der Login noch gültig ist.
Das solltest du dann im Programm umsetzten, wie gesagt diese funktion sind eigentlich für die Abfrage gedacht und ich vermute auch, dass sie genau deshalb auch einen Timestamp zurückgeben, also kein Datum an sich.
 
Jetzt geht es ja.
@DarkDragon193: Nicht die Lösung, die ich brauche. lastActivity ist ja auch ein Datetime und kein Timestamp. Millisekunden mag ich auch nicht. :P
 
Wieso nicht? Mittels date( time( ) ); kanst du ebenso den jetzigen Moment als String formatieren. Ich persönlich finde diesen Weg besser, aber das bleibt letztendlich dir überlassen... ;)
 
Weil ich nicht das jetzt brauche, sondern die Variable, um als Admin auch zu sehen, wann wer ausgeloggt wird. Manche Benutzer werden früher ausgeloggt, etc.

Struppi: Ich kann auch gerne rein mit PHP machen. :P Aber ich habe bewusst mysql_query genommen, weil Query noch eine WHERE Klausel bekommen wird.

Sorry für Missverständnisse.
 
Struppi: Ich kann auch gerne rein mit PHP machen. :P Aber ich habe bewusst mysql_query genommen, weil Query noch eine WHERE Klausel bekommen wird.

Sorry für Missverständnisse.
Das ist kein Missverständnis, den auch das erklärt nicht, warum du den Wert eines Feld bei der Abfrage so veränderst. Eine where Klause kannst du auch mit den echten Timestampwerten machen. Bzw. wenn die Abfrage DATE_ADD beinhaltet, dann wäre es ja auch richtig. Ich verstehe nur nicht, warum du den Wert des Feldes falsch zurück geben lassen willst.
 
Naja, ich verstehe nicht so ganz recht, was du mir beibringen möchtest.

Ich dachte, so könnte ich das alles in einem Query machen, statt Query + PHP Zeilen.
Und ich brauche nun mal + X Minute von einer Variable.

Schreib doch einfach mal ein Beispiel, wie du es machen würdest und es wird sicherlich Klick machen. :)
 
Siehe Manual:
MySQL :: MySQL 5.1 Reference Manual :: 11.7 Date and Time Functions

Code:
SELECT DATE_ADD(feldMitDateTime, INTERVAL 30 MINUTE)

oder

Code:
SELECT DATE_ADD(FROM_UNIXTIME(feldMitTimeStamp,'%Y-%m-%d %H:%i:%s'), INTERVAL 30 MINUTE)

Und wenn Du die Ausgabe dann noch anpassen willst, DATE_FORMAT() verwenden:

Code:
SELECT DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(feldMitTimeStamp,'%Y-%m-%d %H:%i:%s'), INTERVAL 30 MINUTE),'%d.%m.%Y %H:%i')
 
Am Rande: Die Angabe des Formats ist bei FROM_UNIXTIME übrigens optional. (Der Standard ist glaube ich das, was threadi explizit angegeben hat.)
 

Neueste Beiträge

Zurück
Oben