felixcc
Goto Top

Serverzeit mit Javascript

Hallo ihr Lieben,

ich habe mal wieder ein Problem.
Ich möchte mit Javascript auf einer Seite die aktuelle Serveruhrzeit sekundengenau darstellen (und für weitere Abläufe verwenden).

Da Javascript Client-Seitig läuft liefert ein "new Date()" leider nur die Client Daten wie Datum und Uhrzeit.

Nun habe ich einen Ansatz gefunden, der mit einem php-Statement die aktuelle Serverzeit auslist und dann manuel die Zeit weiterzählen lässt.
Funktioniert, aber von genauer Uhrzeit kann man nicht reden, da ein sleep-Timer verwendet wird, der mir schon nach 2 Minuten um 5 Sekunden falsch geht.

Aber man kann ja die Serverzeit mit php auslesen, mit der Client-zeit vergleichen und dann immer von der Clientzeit die Differenz abziehen.
Läuft auch soweit, aber nur unter Linux mit Firefox, unter Windows bekomme ich schon beim Konvertieren des Datumsstrings als Ausgabe "NaN".
Ich habe viele Verschiedene Formatierungen der Ausgabe von date unter php durchprobiert, aber nur bei "Y,m,d,G:i:s" funktioniert auch eine Umwandlung.
Anbei mal die wichtigen Passagen:

im HTML:
<body onload='setDifference(" <?php echo date("Y,m,d,G:i:s"); ?>")'>
<span id="Zeitbereich"></span>
...

in der Javascript-Datei:

var diff = 0; Globale Variable Diff wird mit setDifference auf Abweichung server-clientZeit gesetzt
var uhr = new Date();
Globale Variable Uhr
function setDifference(servertimeString)
{
alert(uhr); <---- Zeigt im IE und FF die aktuellen Client-Daten
servertime = new Date(servertimeString)
alert(servertime);
<--------Im FF stehen die Serverdaten im IE "NaN"
diff = Number(servertime)-Number(uhr);
alert(diff); //<------ FF: "-243" IE:"NaN"#
showTime();
}

function showTime()
{
.....
document.getElementById("Zeitbereich").innerHTML= uhr;
t = settimeout('showTime()',500);
}


Könnt ihr mir sagen woran es liegt, dass es im FF klappt und im IE nicht?
Gibt es vielleich bessere Varianten soetwas zu realisieren?

Content-ID: 161980

Url: https://administrator.de/forum/serverzeit-mit-javascript-161980.html

Ausgedruckt am: 23.12.2024 um 11:12 Uhr

redder
redder 03.03.2011 um 14:54:58 Uhr
Goto Top
Hi,
ich habe gerade ein kleines Problem mit deinem Quellcode face-smile

Am Anfang führst du die Funktion "uhrzeit()" aus und übergibst die Serveruhrzeit mit PHP.
Wo genau ist die Funktion "uhrzeit()" definiert?

Ansonsten fallen mir als erstes die IE Sicherheitseinstellungen ein. Ist Javascript aktiviert etc.?

Hier auch noch ein Link wo ziemlich genau das gemacht wird was du haben willst:
http://www.webmaster-resource.de/uhrzeit-des-webservers-mit-javascript- ...
felixcc
felixcc 03.03.2011 um 15:00:51 Uhr
Goto Top
hallo,
das mit der uhrzeit() war ein Kopierfehler
habes geändert in showTime(), dann kann man es auch nachvollziehen face-smile

Die restlichen Javascript-Befehle werden ohne Probleme ausgeführt, also liegt es nicht am IE.

Den Link hatte ich auch schon gefunden, da gefällt mir allerdings nicht, dass das mit einem Timer realisiert wurde.
Das führt realtiv schnell zu rapiden Abweichungen.

Gruß
Felix
redder
redder 03.03.2011 um 15:39:58 Uhr
Goto Top
Hi,
so richtig schlau werde ich aus deinem Code immer noch nicht^^

uhrzeit() steht immer noch im onLoad
Wann genau wird setDifference(servertimeString) aufgerufen?

Bei der Beschreibung deines Problemes denke ich, dass bei der Datumsübertragung von PHP zu Javascript zu einem Problem kommt.
Hast du evtl. irgendwo ein Schreibfehler der von Firefox ignoriert wird, mit dem der IE aber nicht umgehen kann?
felixcc
felixcc 03.03.2011 um 15:59:53 Uhr
Goto Top
So jetzt aber...

das kommt davon wenn man während man seine Frage formuliert noch im Quelltext rumprobiert...

Das Problem liegt daran, dass im Firefox ein String mit dem Format "2011,03,03,15:57:22" in Javascript in ein Date umgewandelt werden kann und im IE da nur NaN draus macht.

Wenn also Jemand weiß in welchem Format ein Datum auch unter dem IE mit Javascript zu einem Date geparst werden kann, wäre ich sehr dankbar.


Bezüglich Schreibfehler habe ich auch schon rumgeguckt, aber ncihts finden können..
Arano
Arano 03.03.2011 um 16:09:07 Uhr
Goto Top
Moin moin,

"< code> some JS </code >" - Code-Tags wären nicht schlecht ! face-wink

ich denke mal das "uhrzeit()" und "setDifference()" die selbe Funktion darstellen sollen...
Außerdem denke ich, dass dein Objektaufruf falsch ist !
w3schools.com - Tutorials - Javascript Date Object
Zitat von www.w3scools.com
There are four ways of instantiating a date:
new Date() // current date and time
new Date(milliseconds) // milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)


~Arano


Edit
Achso, auf selfHTML wird "dateString" als "Monat Tag, Jahr Stunden:Minuten:Sekunden" dargestellt.
http://de.selfhtml.org/javascript/objekte/date.htm
redder
redder 03.03.2011 um 16:13:06 Uhr
Goto Top
Ok jetzt macht das alles Sinn xD

Mir fällt auf, dass z.B. ein Semikolon hinter servertime = new Date(servertimeString) fehlt.
Ich bin jetzt nicht sicher ob das so auch in deinem Quellcode steht oder nur hier auf der Seite, aber ich würde mal deinen ganzen Quellcode nach diesen Flüchtigkeitsfehlern durchsuchen.
felixcc
felixcc 03.03.2011 um 16:30:34 Uhr
Goto Top
Hallihallo,

genau, statt Uhrzeit() heißt es jetzt setDifference().

Bei w3schools habe ich mich auch schon durchgearbeitet und da besteht das Problem, dass der Fall 3 --> (var d3 = new Date(79,5,24,11,33,0) <--- nicht funktioniert (weder ie noch ff)
Bei mir funktioniert es nur wenn ich den String so formatiere: --> new Date(79,5,24,11:33:00) <---- Dann aber nur ff und nicht ie...
und jetzt bin ich halt auf der Suche nach dem Format welches für ie und ff geht, und...

...dank deines Links habe ich auch gerade die Lösung gefunden.
Der erste Fall geht in FF und IE!!
Ich muss jetzt nurnoch mein php statement so anpassen,dass es auch das Datum im folgenden Format ausgibt: "October 13, 1975 11:13:00".

Wenn ich das gefunden habe, poste ich die Lösung und markiere es als gelöst.

Ich danke euch allen für die tolle Unterstützung!

Gruß
Felix

edit:
Lösung:
<?php echo date("F d, Y G:i:s"); ?>
liefert ein Format welches in Javascript in eine Date umgewandelt werden kann und zwar im IE und im FF.