Rechnen mit Zeit
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
befehl
code
datenbank
durchgang
durchlauf
grad
login
minute
nutzen
operation
sekunde
speichern
stimmen
stunde
stunden
tag
umsetzen
vorgehen
zufall
-
Hallo Kommunity!
Ich würde gerne mit MySQL und PHP anzeigen lassen wie lange es her ist dass sich ein User eingeloggt hat.
Da ich mit MySQL erst vor ein paar Tagen angefangen habe weiss ich nicht wie ich mit den Zeitbefehlen vorgehen soll, bisher habe ich nur mit $timestamp gearbeitet.
Auf der Loginseite möchte ich den Befehl einzetzen, welcher die aktuelle Zeit in die Datenbank schreibt.
Nachher soll auf einer anderen Seite mit der aktuellen Zeit und der Zeit in der Datenbank ausgerechnet werden wie lange der Login her ist.
Könnt ihr mir helfen? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
MySQL hat ebenfalls eine Timestamp-Funktion.
http://dev.mysql.com/doc/refman/5.1/de/timestamp-4-1.html
Andererseits könntest du den timestamp natürlich auch aus php übernehmen und nur als string speichern ;) -
Das habe ich grade versucht, mit meinem Script scheint allerdings etwas nicht zu stimmen, meinchmal werden die Zeiten falsch angezeigt.
Hier das Script:
$timestamp = time(); $speicher = ($row->login); $zeit = ($timestamp - $speicher); while($zeit >= 3600) { $zeit = ($zeit - 3600); $stunde = ($stunde + 1); } while($zeit >= 60) { $zeit = ($zeit - 60); $minute = ($minute + 1); } if($stunde == 1){ $stunden = 'Stunde'; } if($stunde > 1){ $stunden = 'Stunden'; } if($minute == 1){ $minuten = 'Minute'; } if($minute > 1){ $minuten = 'Minuten'; } if($zeit == 1){ $sekunden = 'Sekunde'; } if($zeit == 0){ $sekunden = 'Sekunden'; } if($zeit > 1){ $sekunden = 'Sekunden'; }
-
Gebe mal jede variable aus und rechne notfalls händisch nach.
Was wird Falsch angezeigt und wie?
Nebenbei würde ich die while-Konsturkte durch Modulo-Operationen ersetzten. Geht schneller.
Und ich hab das mal ein kleinwenig optimiert, also die ifabfragen.
$timestamp = time(); $speicher = ($row->login); $zeit = ($timestamp - $speicher); while($zeit >= 3600) { $zeit = ($zeit - 3600); $stunde = ($stunde + 1); } while($zeit >= 60) { $zeit = ($zeit - 60); $minute = ($minute + 1); } if($stunde == 1){ $stunden = 'Stunde'; } elseif($stunde > 1){ $stunden = 'Stunden'; } if($minute == 1){ $minuten = 'Minute'; } elseif($minute > 1){ $minuten = 'Minuten'; } if($zeit == 1){ $sekunden = 'Sekunde'; } elseif($zeit <> 1){ $sekunden = 'Sekunden'; }
-
Das Problem ist grade wieder aufgetaucht.
Ein User ist vor kurzem online gegangen und bei ihm wird fast die gleiche Zeit wie bei einem anderen User ausgegeben, welcher allerdings gestern oder vorgestern das letzte mal online war.
User1: - 48 Stunden 40 Minuten 32 Sekunden - 1222158407
User2: - 48 Stunden 61 Minuten 44 Sekunden - 1222240115
Woran liegt das? -
Es empfiehlt sich wie nerdinator schon zu Recht empfohlen hat, immer TIMESTAMP in MySQL für sowas zu nutzen ... da du damit viel bequemer in der SQL-Query selbst deine Abfragen durchführen kannst. Somit umgeht man das nachträgliche gefuddel mit PHP :D
Gruß
webwalker
Beitrag geändert: 24.9.2008 10:12:49 von webwalker -
Hi,
gib einfach mal die Variablen aus:
$timestamp = time(); $speicher = ($row->login); $zeit = ($timestamp - $speicher); echo $timestamp."<br>"; echo $speicher."<br>"; echo $zeit."<br>"; // ...
Dann siehste auch was aus der Datenbank kommt, was time dir liefert und ob die Berechnung klappt
Grüßle
Beitrag geändert: 24.9.2008 10:20:47 von scout -
Der Timestamp wird nicht ausgegeben, die gespeicherten Stamps stimmen und die restlichen Sekunden stimmen an sich auch.
Diese Zeit ist vorhin ausgegeben worden:
52 Stunden 80 Minuten 31 Sekunden
(der User hat sich heute angemeldet und die 80 Minuten müssten eh umgerechnet werden...)
webwalker schrieb:
Es empfiehlt sich wie nerdinator schon zu Recht empfohlen hat, immer TIMESTAMP in MySQL für sowas zu nutzen ... da du damit viel bequemer in der SQL-Query selbst deine Abfragen durchführen kannst. Somit umgeht man das nachträgliche gefuddel mit PHP :D
Gruß
webwalker
Beitrag geändert: 24.9.2008 10:12:49 von webwalker
Wie kann ich das denn mit dem MySQL-Timestamp umsetzen?
-
Durch Zufall habe ich den Fehler grade entdeckt.
Da ich in jedem Durchgang die Stunden und Minuten hochzähle muss ich sie vor dem nächsten Durchlauf wieder zurücksetzen :P
$timestamp = time(); $speicher = ($row->login); $stunde = ""; $minute = ""; $zeit = ($timestamp - $speicher); while($zeit >= 3600) { $zeit = ($zeit - 3600); $stunde = ($stunde + 1); } while($zeit >= 60) { $zeit = ($zeit - 60); $minute = ($minute + 1); } if($stunde == 1){ $stunden = 'Stunde'; } if($stunde > 1){ $stunden = 'Stunden'; } if($minute == 1){ $minuten = 'Minute'; } if($minute > 1){ $minuten = 'Minuten'; } if($zeit == 1){ $sekunden = 'Sekunde'; } if($zeit == 0){ $sekunden = 'Sekunden'; } if($zeit > 1){ $sekunden = 'Sekunden'; }
-
Für sowas empfiehlt sich immer ein error_reporting(E_ALL); - dann hätte er Dir wahrscheinlich gleich gesagt, dass du nicht initialisierte Variablen hast ;)
-
Hmm error_reporting(E_ALL); kannte ich noch nicht, danke ;)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage