Timestamp fehler??
Daniel
- php
Hi,
ich möchte das der User angezeigt bekommt wielange er schon auf meiner seite ist und sie sich anschaut. habe es so gelösst:
<?
$aktuelleZeit = date("U");
if (isset($_SESSION['loginZeit'])){
$_SESSION['loginZeit'] = date("U");
}
$onlineZeit = $aktuelleZeit - $_SESSION['loginZeit'];
$onlineStunde = date("H", $onlineZeit);
$onlineMinute = date("i", $onlineZeit);
echo "du bist seit <b>$onlineStunde</b> Stunde(n) und <b>$onlineMinute</b> Minute(n) Online";
?>
Komischerweise erhalte ich gleich 1Stunde als Online Zeit, warum?
MfG
Hallo,
warum benutzt du denn date("U"); ich würde dir die Funktion time(); empfehlen:
$aktuelleZeit = time();
#2:
if (isset($_SESSION['loginZeit'])){
$_SESSION['loginZeit'] = date("U");
}
Wenn der also eine loginZeit hat, dann wird diese durch die aktuelle Zeit ersetzt ???
Ich denke mal dort sollte !isset(...) stehen ;)
Und genau liegt das Problem, die LoginZeit wird immer durch den aktuellen Timestamp ersetzt. ;)
MFG
Andavos
Hi,
ja habs grad selber gesehn, hatte mich vertippt, sollte mir strg+c str+v wieder angewöhnen.
MfG
Hallo,
also weiter fällt mir nichts auf, außer das session_start(); noch fehlt.
Aber solchen Fehler kann man ganz leicht auf die Schliche kommen.
Hier ein Beispiel, wie man den Fehler finden kann:
<?
session_start();
$aktuelleZeit = time();
echo "aktuelle Zeit: $aktuelleZeit <br>";
if (!isset($_SESSION['loginZeit'])){
$_SESSION['loginZeit'] = time();
echo "Sess gesetzt: ".$_SESSION['loginZeit']."<br>";
}
$onlineZeit = $aktuelleZeit - $_SESSION['loginZeit'];
echo "OnlineZeit: $onlineZeit <br>";
$onlineStunde = date("H", $onlineZeit);
$onlineMinute = date("i", $onlineZeit);
echo "du bist seit <b>$onlineStunde</b> Stunde(n) und <b>$onlineMinute</b> Minute(n) Online";
?>
Desweitern date("H") und date("i") gibt die Stunde und Minute des Zeitpunktes des Timestamp aus. Der Timestamp sind die Sekunden seit 1.1.1970 00:00:00
Wenn er jetzt z.B. 25 Stunden auf deiner Seite wäre, dann wäre dies der Timestamp für: 2.1.1970 01:00:00
Also Ausgabe wäre eine 1 Stunde und 0 Min.
Darum musst du die Sekunden manuell in Minuten/Stunden umrechnen.
MFG
Andavos
Hi,
hab jetzt 2 "lösungen":
Nr.1:
<?
$aktuelleZeit = time();
if (!isset($_SESSION['loginZeit'])){
$_SESSION['loginZeit'] = time();
}
$onlineZeit = $aktuelleZeit - $_SESSION['loginZeit'];
$Minute = $onlineZeit/60;
$Stunde = $Minute/60;
while ($Minute >= 60)
{
$Minute = $Minute-60;
}
$Minute = round($Minute);
$gerundetStunde = round($Stunde);
if ($gerundetStunde>$Stunde)
{
$gerundetStunde--;
}
$onlineStunde = $gerundetStunde;
$onlineMinute = $Minute;
echo "du bist seit <b>$onlineStunde</b> Stunde(n) und <b>$onlineMinute</b> Minute(n) Online";
?>
wobei mir das gerunde von der Stunde nicht gefällt, gibts da keine
Funktion um Automatisch abzurunden?
Nr.2:
<?
$aktuelleStunde = date("H");
$aktuelleMinute = date("i");
if (@$_SESSION['loginStunde'] == null){
$_SESSION['loginStunde'] = date("H");
$_SESSION['loginMinute'] = date("i");
}
$onlineStunde = $aktuelleStunde - $_SESSION['loginStunde'];
$onlineMinute = $aktuelleMinute - $_SESSION['loginMinute'];
if ($onlineMinute<0){
$onlineStunde--;
$onlineMinute = $onlineMinute +60;
}
echo "du bist seit <b>$onlineStunde</b> Stunde(n) und <b>$onlineMinute</b> Minute(n) Online";
?>
Welche Lösung ist "besser"? Verbesserungsvorschläge?
MfG
hi,
wobei mir das gerunde von der Stunde nicht gefällt, gibts da keine
Funktion um Automatisch abzurunden?
floor() statt round().
gruß,
wahsaga
Hallo,
hier mal ein kleines Tool zum Errechnen von Sek in Tage, Stunden, Min etc.
<?php
$dif = 1234; //Timestamp der umgerechnet werden soll:
$tag = floor($dif / (3600*24));
$std = floor($dif / 3600 % 24);
$min = floor($dif / 60 % 60);
$sek = floor($dif % 60);
printf("%02d:%02d:%02d:%02d",$tag,$std,$min,$sek);
?>
Das printf() dient, um das Format: 00:00:00:00 zu erhalten, sonst würden führende Nullen nicht angezeigt werden.
P.S. Das %60 ist Modulo-Division, es wird hier z.B. durch 60 geteilt und dann der Rest ausgegeben.
So sind die Werte für Sek, Min, Std nicht größer als angegeb (24 bzw. 60)
MFG
Andavos
Hi,
if (isset($_SESSION['loginZeit'])){
nächstmal kopier ich. Da steht natürlich:
if (!isset($_SESSION['loginZeit'])){