Fortlaufende Stoppuhr basierend auf Serverzeit
Dieter
- php
Hallo,
leider bin ich ein absoluter Anfänger in Sachen Javascript, möchte aber folgendes realisieren:
Eine fortlaufende Zeitanzeige in der Form Tage, Stunden, Minuten und Sekunden basierend aber auf der Serverzeit - also nicht einfach per new_Date da dieses mir ja die eingestellte Zeit des Users liefert.
Die Grundzeit (also die Startzeit) liegt mir in Form eines Unix-Timestamps ($aktivgebdatum) vor, wie aber kann ich das Javascript dazu bringen, nicht von der Userzeit, sondern von der aktuellen Serverzeit zu rechnen ?
Ich benutze derzeit folgenden (Fertig-)Code:
<script>
<!--
var stunden = 0;
var minuten = 0;
var sekunden = 0;
var Datum = new Date('.date("Y",$aktivgebdatum).','.date("m",$aktivgebdatum).','.date("d",$aktivgebdatum).','.date("H",$aktivgebdatum).','.date("i",$aktivgebdatum).','.date("s",$aktivgebdatum).');
function uhr ()
{
var AktuellesDatum = new Date();
var Vergangen = new Date (AktuellesDatum - Datum);
var sekunden = Vergangen.getSeconds();
var minuten = Vergangen.getMinutes();
var stunden = Vergangen.getHours() - 1;
document.getElementById(\'aktivalter\').innerHTML =stunden+" Stunden "+minuten+" Minuten "+sekunden+" Sekunden";
window.setTimeout (\'uhr()\',1000);
}
uhr();
-->
</script>
Nun stellt sich mir natürlich die Frage, wie ich entsprechend die Zeile
var AktuellesDatum = new Date();
abändern kann, damit dort die Serverzeit (time()) verwendet wird.
Ein einfaches austauschen mit der Serverzeit wie bei "datum" geht ja nicht, da ich ja sonst keinen mitlaufenden Zeitwert hätte....
Ferner verstehe ich so ganz noch nicht, wie ich die Anzeige "Tage" realisieren kann.
Ich hoffe mir kann hier jemand helfen - ich hab irgendwie das Gefühl das ich den Wald vor lauter Bäumen nicht mehr sehe...
VG
Dieter
Hi,
var Datum = new Date('.date("Y",$aktivgebdatum).','.date("m",$aktivgebdatum).','.date("d",$aktivgebdatum).','.date("H",$aktivgebdatum).','.date("i",$aktivgebdatum).','.date("s",$aktivgebdatum).');
Das geht auch einfacher - Date kann auch einen Unix-Timestamp als Parameter benutzen, allerdings inklusive Millisekunden. Also einfach Ausgabe von PHPs time()-Funktion mit 1000 multiplizieren, fertig.
Nun stellt sich mir natürlich die Frage, wie ich entsprechend die Zeile
var AktuellesDatum = new Date();
abändern kann, damit dort die Serverzeit (time()) verwendet wird.
Ein einfaches austauschen mit der Serverzeit wie bei "datum" geht ja nicht, da ich ja sonst keinen mitlaufenden Zeitwert hätte....
Dann bilde zu Beginn die Differenz zwischen Server-Timestamp und Client-Timestamp.
Diese rechnest du dann zum immer wieder neu genommenen Client-Timestamp hinzu.
Ferner verstehe ich so ganz noch nicht, wie ich die Anzeige "Tage" realisieren kann.
Mathematik.
MfG ChrisB
Hallo nochmal,
so, jetzt habe ich folgenden Code versucht:
<script>
<!--
var stunden = 0;
var minuten = 0;
var sekunden = 0;
var Datum = new Date('.$aktjsalter.'000);
var serverzeit = '.$aktjszeit.'000;
var clientzeit = new Date();
alert(clientzeit);
if(serverzeit>clientzeit) { var diffzeit = serverzeit - clientzeit; var diffrech="1"; }
if(serverzeit<clientzeit) { var diffzeit = clientzeit - serverzeit; var diffrech="2"; }
function uhr ()
{
var clientzeit2 = new Date();
if(diffrech=="1") var AktuellesDatum = new Date(clientzeit2+diffzeit);
if(diffrech=="2") var AktuellesDatum = new Date(clientzeit2-diffzeit);
var Vergangen = new Date (AktuellesDatum - Datum);
var sekunden = Vergangen.getSeconds();
var minuten = Vergangen.getMinutes();
var stunden = Vergangen.getHours() - 1;
document.getElementById(\'aktivalter\').innerHTML =stunden+":"+minuten+":"+sekunden+"";
window.setTimeout (\'uhr()\',1000);
}
uhr();
-->
</script>
$aktjszeit ist hierbei time(), nur leider sagt mit das js-Teil nur als Ausgabe NaN (also doch, wenn ich die Tuts richtig verstehe, das es keine Nummer ist...).
Ein kleiner Schubs in die richtige Richtung wäre jetzt wirklich nett...
VG
Dieter
Hallo
so, jetzt habe ich folgenden Code versucht:
<script>
<!--
var stunden = 0;
var minuten = 0;
var sekunden = 0;
var Datum = new Date('.$aktjsalter.'000);
var serverzeit = '.$aktjszeit.'000;
> $aktjszeit ist hierbei time(), nur leider sagt mit das js-Teil nur als Ausgabe NaN (also doch, wenn ich die Tuts richtig verstehe, das es keine Nummer ist...).
Was steht in der JavaScript-Variable `$aktjszeit`{:.language-javascript}?
> Ein kleiner Schubs in die richtige Richtung wäre jetzt wirklich nett...
<schubs>PHP wird auf dem Webserver ausgeführt (geparst), undzwar genau dann, wenn die Ressource beispiel.php angefordert wird. Ist der PHP-Parser fertig, wird das Dabei generierte Dokument an den Browser ausgeliefert. Im Browser angekommen kann mit dem und im Browser auch im Dokument eingebettetes oder verlinktes JavaScript ausgeführt werden.
Tschö, Auge
--
Die deutschen Interessen werden am Liechtenstein verteidigt.
[Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
Hi,
var Datum = new Date('.$aktjsalter.'000);
if(diffrech=="1") var AktuellesDatum = new Date(clientzeit2+diffzeit);
if(diffrech=="2") var AktuellesDatum = new Date(clientzeit2-diffzeit);
var Vergangen = new Date (AktuellesDatum - Datum);
Ich glaube nicht, dass man so die Differenz aus zwei Date-Objekten bilden kann.
Du müsstest schon die Differenz aus zwei Timestamps bilden, und daraus dann wieder ein Date-Objekt erzeugen (kann ungünstig werden, was bspw. die Abfrage der Stunden angeht, Stichwort Zeitzone), oder halt manuell ausrechnen, wie vielen Sekunden/Minuten/Stunden/Tagen die Angabe in Sekunden entspricht.
MfG ChrisB
Hello,
Das geht auch einfacher - Date kann auch einen Unix-Timestamp als Parameter benutzen, allerdings inklusive Millisekunden. Also einfach Ausgabe von PHPs time()-Funktion mit 1000 multiplizieren, fertig.
spannende Frage:
Wo würdest Du die Multiplikation durchführen lassen? Im PHP-Script oder erst auf dem Client im JavaScript-Script?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg