# Now()



## DarkWanderer (17. August 2003)

Hallo zusammen,

vielleicht (hoffentlich) habe ich in diesem Forum mehr Glück 

Also folgende Situation ist gegeben :

Aus der Datenbank (MySQL) lese ich ein Feld aus, wenn sich ein benutzer bei uns einloggt. In diesem Feld steht, wann der Benutzer zuletzt Online war. Der Wert wurde mit Now() eingetragen, liegt also im Format "2003-08-16 22:16:08" vor.

So, nun brauche ich, die exakte Zeitdifferenz zwischen diesem letzten Login und der aktuellen Uhrzeit/Datum.

Nur habe ich keine Ahnung wie ich das am geschicktesten anstellen kann.

Ich hoffe ihr habt da einen Lösungsweg für mich, was wirklich klasse wäre.
Also ich brauche wie gesagt nicht nur die Tage als Differenz, sondern in meinem Falle eben die EXAKTE Dauer der differenz.

Danke für eure Hilfe, Darky


----------



## Mark (17. August 2003)

Hi!

SELECT (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(last_visit)) AS visit_diff FROM ...
ist sekundengenau...

Meinst Du soetwas?


----------



## DarkWanderer (17. August 2003)

Sieht gut aus, werde ich gleich mal testen 

Also das gibt dann als Ergebnis die Differenz in Sekunden zurück, hab ich das so richtig verstanden ?

Falls ja, wäre alles wunderbar und ich sag schionmal dankeschön 


Update : krieg das nicht hin, könnet aber an fehlern meinerseite liegen ;(


----------



## Mark (17. August 2003)

Ja, der "UNIX_TIMESTAMP()" liefert die Sekunden seit dem 1.1.1970 - jetzt wo ich's schreibe merke ich gerade, daß das "NOW()" eigentlich wegkönnen müsste - bis jetzt.
Mit einem Datum als Parameter die Sekunden vom 1.1.1970 bis zu diesem Datum.
Die Differenz ist die vergangene Zeit in Sekunden...
Sollte passen ;-)


----------



## DarkWanderer (17. August 2003)

Also ich bekomm kein Ergebnis ;(

Vielleicht bin ich auch einfach zu doof das ganze richtig anzuwenden *gg*

Also ich hab das in meine SQL Abfrage gepackt :

$abfrage = ("SELECT (UNIX_TIMESTAMP (NOW())- UNIX_TIMESTAMP(lastturn)) AS last_turn FROM " . $dbprefix . "user WHERE id=$id") ;

Nur wo is jetzt die Variable die mein Ergebnis enthält ? 

Mir fehlt noch der zündende Funke das zu verstehen


----------



## Mark (17. August 2003)

Zunächsteinmal: es gibt natürlich zwei Möglichkeiten:
Die eine ist, sich den "last_turn" von der Datenbank liefern zu lassen und im Programm die Unix-Zeit-Differenz auszurechnen.
Die andere schickte ich, wo die Differenz direkt von der Datenbank kommt.
Der Vorteil an Variante 2: Du kannst WHERE oder ORDER BY Anweisungen auf diese Differenz beziehen.

Mit AS weist Du die Differenz einer "Variablen" zu. D.h. im Unix_timestamp steht ja die Variable, die Du sonst vorher geholt hast - bei Dir lastturn. Die Differenz bekommst Du in last_turn (würde differenzierteren Namen empfehlen).
Wie Du also lastturn bekommen hast, bekommst Du nun auch last_turn.

Um welche Programmiersprache geht's eigentlich?


----------



## DarkWanderer (17. August 2003)

Es geht um PHP 

Nur bekomme ich eben kein Ergebnis geliefert, so wie ich normal meine Daten abfrage ;(

Also vielleicht erklär ich es mal so : Wenn ich mir lastrurn anzeigen lasse, gehe ich so vor :

$abfrage = ("SELECT lastturn FROM " . $dbprefix . "user WHERE id=$id");
$ergebnis = mysql_query($abfrage) ; while($row = mysql_fetch_object($ergebnis))
{
echo $row->lastturn ;
} mysql_free_result($ergebnis) ;

Ist vielleicht nicht der ideale Weg, aber klappt völlig Problemlos aber darum geht es ja auch überhaupt nicht.

Wenn ich aber das ganze in den von dir geposteten Code umbaue, klappt das ganze nicht :

$abfrage = ("SELECT (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(lastturn)) FROM " . $dbprefix . "user WHERE id=$id AS last_turn") ;
$ergebnis = mysql_query($abfrage) ; while($row = mysql_fetch_object($ergebnis))
{
echo $row->lastturn ;
}

Dieser Versuch endet nur damit :

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /is/htdocs/xxxx/www.xxxx.de/endturn.php on line 73
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in /is/htdocs/xxxx/www.xxxx.de/endturn.php on line 77

Vielleicht hilft dir das ein Wenig weiter, ich schaffe es nämlich einfach nicht und verzweifle schon daran ;(


----------



## Mark (17. August 2003)

Ui, nee, da ist Dir das AS verrutscht!!!

Mit AS kannst Du den Rückgabewerten Namen geben:

$abfrage = ("SELECT (UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(lastturn))
* AS turn_diff * 
FROM " . $dbprefix . "user WHERE id=$id");

$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo $row->*turn_diff* ;
}

Das sollte es sein...


----------



## DarkWanderer (17. August 2003)

Nein leider nicht, endet ebenfalls mit der Fehlermeldung von oben ;(

Ich hab mich bereits in zwei anderen Foren versucht und hab mir auch n paar tolle Anleitungen um die Ohren geschlagen, die kein mensch versteht.

Irgendwie bin ich aber immer noch soweit wie am Anfang, das mus doch möglich sein
*rumheul*


----------



## DarkWanderer (17. August 2003)

ich nehm es zurück, nun geht es, hatte mich vertippt 

Ich sag dann erstmal vielen Dank für deine Lösung, die nun zum Glück funktioniert 

Zeit für's Bettchen 

Liebe Grüsse, Darky


----------

