Serverzeit Javascript Uhr

will auf der site ne Uhr einbaun die die aktuelle zeit in Deutschland (wahlweise vom server) zeigt.
will das ganze aber nicht einfach von iwo extern einbinden.

hab iwo n skript gefunden (php/javascript) mit dem ich aber nicht so ganz was anfangen kann.

[code]<?
echo "
Zeit

<table align=‘left’


                    </td>
                </tr>
            </table>";

?>

[/code]

das ganze funzt auch (uhr braucht so 1-2 sek bis sie erscheint)

  1. Frage ist das Skript wie es ist ok oder geht das anders leichter?
  2. Frage wie lässt sich das ganze in meine index.html einbinden?
    ich versteh das ganze soweit dass es über time() die zeit ausliest und die dann umbastelt bis es so ist wies soll und das script dann die uhr laufen lässt.

lässt sich das als platzhalter einarbeiten (also html datei durch php ausgegeben und die uhr mit nem array einbaun)

so wies oben im code ist landet die uhr da wo ein element die ID Uhr hat

kann man das mit Javascript auch auf ne variable legen mit document.write

sorry hab 0 plan von Javasciptsyntax

<p><strong>Die aktuelle Zeit</strong><br />Es ist jetzt 

<?php

echo strftime("%c");
setlocale (LC_TIME, "de_DE");
echo strftime("%c");

?> 

Uhr.</p>

Sollte reichen… eine regelrechte Uhr (mit sekündlich wechselnder Anzeige) halte ich eher für kontraproduktiv. Hat ja jeder selber auf dem PC…

[code]

Die aktuelle Zeit
Es ist jetzt

<?php setlocale (LC_TIME, "de_DE"); echo strftime("%R"); ?>

Uhr.

[/code]

in der form reichts mir schon soweit als nicht JS variante thx

würd trotzdem falls es die performance nicht groß beeinträchtigt ne laufende Uhr einbaun wollen.

die PC zeit ist aber abhängig davon wo der grad ist und das was ich brauche ist ne anzeige von GMT + 1 was eben nicht jeder aufm PC hat ohne umzuschalten oder im netz rauszusuchen oder nachzudenken (letztere 3 sachen kann man nun mal nicht von jedem erwarten)

GMT ist schon seit Jahrzehnten überholt.
Primärzeit ist heute eigentlich TAI, davon abgeleitet wird UTC,
davon wiederum abgeleitet wird die Zeitschätzung, die auf
aktuellen Computern läuft, welche bestenfalls etwa per NTP mit
einer Quelle automatisch korrigiert wird, die UTC mit
entsprechenden Genauigkeitsangaben liefert. Man kann übrigens
die exakte Korrelation zwischen der präzisen TAI und der UTC
formal nur für ein paar Monate im voraus angeben. Eigentlich
ist also die UTC für zukünftige Ereignisse nicht definiert/bekannt,
die GMT wäre zwar formal definiert, man kann sie aber im voraus
nicht berechnen.
Es wird sich heute kaum noch jemand Mühe geben, von UTC nach
GMT umzurechnen ;o)

Insofern sind präzise Zeitangabe nicht trivial, schon gar nicht in
GMT, um welches sich seit Jahrzehnten niemand mehr ernsthaft
kümmert. Es gibt ja sogar Vorschläge, Schaltsekunden für ein
paar Jahrzehnte oder Jahrhunderte ganz auszusetzen, so daß
zwischen TAI und UTC nur noch ein fester Abstand von ein paar
Sekunden besteht, dann wird es noch kniffliger/ungenauer, die
veraltete GMT zu bestimmen.

Als Konsequenz ist man also darauf angewiesen, die Uhr (UTC)
immer wieder zu stellen oder stellen zu lassen (Funkuhr, NTP im
Netz).
Der Nachfolger von GMT ist UT und das weicht nicht mehr als
0.9s von UTC ab. Die Bestimmung dieser Abweichung ist das
Problem, wenn man heute noch für die aktuelle Zeit einen
korrekten GMT-Wert bestimmen will, da es dafür aufwendigerer
Messungen bedarf. Der Unterschied zwischen UT und GMT ist
wohl wiederum ein halber lokaler Tag bei Greenwich, was einfach
zu berücksichtigen ist.

wieder was gelernt :smiley:

kk

also zum code in meinem ersten post
das ganze liest doch im endeffekt die serverzeit mit php aus und die wird dann in der javascript funktion verwertet um die zeit auszugeben, wobei die Funktion sich immer selbst um eine sekunde verzögert aufruft damit das ganze sekündlich weiterläuft.
und die Funktion selbst wird nach ner sekunde gestartet was zur folge hat dass die uhr erst nach 2 sek erscheint.

lässt sich das ganze auch ohne die verzögerung durchführen (z.B. mit setInterval() statt setTimeout() ?

und muss man das ganze über time() und dann mit JS die uhrzeit auslösen oder kann man auch einfach strftime("%T"); auf ner variable speichern und die dann mit JS jede sekunde anzeigen?

wird das ganze so serverlastig dass ich :stress: kriege wenn es jede sek. die zeit abruft?

Also, ich denke, du solltest nicht jede Sekunde irgendeine
Abfrage automatisch an den server senden und schon gar nicht
der Uhrzeit wegen.
Auf dem server wie auf dem Rechner eines jeden Anwenders
läuft ein billiger Quarz-Oszillator für ein paar Cent, der immerhin
eine Genauigkeit von typisch besser als 1E-5 hat, also weniger
als eine Sekunde am Tag falsch geht. Selbst wenn der server
an NTP angeschlossen ist, wird auch der nur alle paar Stunden
seinen Oszillator korrigieren und mit vor- zurück- und
Korrekturrechnung vielleicht auf 1E-6 kommen. Demzufolge
kannst du die server-Zeit einmal (pro Tag) vom server abfragen
und dann den Wecker einen Tag lang frei mit dem billigen
Oszillator laufen lassen und die Abweichung wird vermutlich
geringer als eine Sekunde am Tag sein, was für die allermeisten
Anwendungen ausreichen sollte, zumal die Übertragung und
Darstellung im browser sowieso schon 0.1s bis 1s dauern wird
mit einem Rauschen bedingt durch die unterschiedliche
Auslastung der internet-Übertragung. Per HTTP wirst du da die
Anzeige sowieso nicht deutlich genauer als auf diese 1s
hinbekommen. Durch das Rauschen der Übertragungszeit
verschlechtert sich das Ergebnis und der Nutzereindruck sogar
eher, wenn du im Sekunden- oder Minutentakt versuchst, den
Wecker zu aktualisieren.
Um überhaupt vom server zu profitieren, solltest du verifizieren,
daß der auch wirklich NTP verwendet (Administrator fragen),
sonst tauscht du nur eine billige Uhr gegen eine andere aus ;o)

Ich habe per deklarativer Animation auch schon analoge und
digitale Uhren mit SVG gebastelt und die Ganggenauigkeit
untersucht und daher weiß ich, daß die browser nicht schlechter
oder ungenauer sind als der lokale Oszillator, der im Rechner
eingebaut ist. Bei einer Skriptanimation hat man da immer noch
etwas Qualitätsschwund. Wenn das ordentlich gemacht wird,
so daß sich Fehler nicht kumulieren, kann man mit solch einer
Skriptanimation aber ähnliche Genauigkeiten erreichen wie mit
einer deklarativen Animation.

ich will die zeit nicht wegen der genauigkeit serverseitig haben sondern eine anzeige der Zeit in dtl als orientation für leute aus anderen Zeitzonen ohne dass sie erst iwo anders die zeit nachschaun oder umrechnen müssen.
da die zeitausgabe von JS clientseitig nur das vom PC anzeigt (was man sich auch sparen kann weil die uhr auch rechts in der taskleiste ist) wollte ich deshalb die serverzeit nehmen (also entweder die variante das mit JS aus time() zu berechnen oder die zeit direkt mit

setlocale (LC_TIME, “de_DE”);
$zeit = strftime("%T");

beziehen.

schwankungen im sekundenbereich sind mir dabei eig. egal.
es ging nur darum ob es die performance runterzieht wenn sich das ganze sekündlich aktualisiert, wenn ja lass ich nur die minuten laufen bzw. lass das JS ganz weg, da man eh nicht unbedingt so lange auf ner page rumgammelt dass man mitkriegt wie ne uhr sich minütlich akualisiert und vorher eher die seite aktualisiert wird.

ne laufende JS uhr mit deutscher zeit könnte man auch extern einbinden aber das abrufen von externen sachen verlangsamt das ganze doch auch oder? außerdem packt adblock immer neben eingebundene elemente son halbtransparentes blockieren zeichen (oder kann man das auch abstellen?)

so versuche mich grad an der variante die serverzeit nur beim aufrufen 1 mal abzurufen und mit der clientzeit zu synchronisieren um dann mit der die JS uhr laufen zu lassen.

scheitere grade wieder an etwas ^^

habs jetzt soweit

[code]

<?php $server = time() * 1000; echo '';

echo $client;
echo ‘
’;
echo $server;
?>

[/code]

die ausgabe ist auch in ordnung aber ich habe probleme mim weiterrechnen

wenn ich $client mit echo aufrufe dann kommt das was soll

aber damit lässt sich nich weiterrechnen soll heißen wenn ich es versuche mit $blub = $client; echo $blub; ist die ausgabe leer bzw. das gleiche wie wenn ich die die differenz aus server und clientzeit bilde erhalte ich als ausgabe die serverzeit weil die clientzeit iwi leer ist

edit: hab das problem gefunden glaub ich
wenn man mit $client weiterarbeitet dann rechnet es nicht mit dem zahlenwert sondern mit document.write(timestamp); was außerhalb vom JS eben leer ist

aber wie kann ich nur den zahlenwert an php weiterreichen um dann mit weiterzurechnen?

Nun, mit java-script kenne ich mich im Detail nicht aus.
Was du hast ist also die einmalig beim Aufruf der Datei per
PHP herausgefundene Zeit des servers, die kannst du (hoffentlich)
mit der vergleichen, die java-script beim Aufruf der Datei
ermittelt. Die Differenz solltest du dir merken. Wenn du nun
sagen wir mal jede Minute per java-script die Zeit darstellen
willst, so ermittelst du diese per java-script, addierst die
anfänglich bestimmte Zeit drauf und hast eine (gute) Schätzung
für die aktuelle server-Zeit.

Per deklarativer Animation ist das noch einfacher, da stellt man
die Uhr einfach zum Dokumentbeginn und gibt eben an, wie
schnell sich Sekunden-, Minuten- und Stundenzeiger bewegen
sollen. Bei Skripten muß man eben darauf aufpassen, daß man
nicht sagt, ich rufe ein Skript auf, welches die Zeitvariable um
eine Minute erhöht und sich nach einer Minute wieder selbst
aufruft, denn das führt zu kumulierenden Fehlern, weil das Skript
dafür ja selbst Zeit braucht.

[quote=“hoffmann”]Nun, mit java-script kenne ich mich im Detail nicht aus.
Was du hast ist also die einmalig beim Aufruf der Datei per
PHP herausgefundene Zeit des servers, die kannst du (hoffentlich)
mit der vergleichen, die java-script beim Aufruf der Datei
ermittelt. Die Differenz solltest du dir merken. Wenn du nun
sagen wir mal jede Minute per java-script die Zeit darstellen
willst, so ermittelst du diese per java-script, addierst die
anfänglich bestimmte Zeit drauf und hast eine (gute) Schätzung
für die aktuelle server-Zeit.[/quote]

Das hab ich ihm bereits geraten :wink:

Dann sollten ja eigentlich in der Hinsicht kaum noch Wünsche
offenbleiben.
(wie man das mit deklarativer Animation macht, steht auf meiner
Seite als Anleitung) ;o)

wünsche bleiben auch keine offen ^^

muss mich nur erstmal reinfinden weil ich bis jetzt 0 mit JS gearbeitet habe (bzw. nie selbst geschrieben)

geht aber schon vorwärts :slight_smile: danke nochmal für die idee mit dem synchronisieren

das mit der animation werd ich mir auch mal anschaun

hm lol mal nebenbei
das was ich als erstes gepostet hab

[code]<?
echo "
Zeit

<table align=‘left’


                    </td>
                </tr>
            </table>";

?>

[/code]

ist doch eig. schon genau das was ich brauche
die serverzeit wird nur über php beim ersten aufruf ausgelesen und dann ruft sich die funktion selbst jede sekunde neu auf mit der zeit die gerade angezeigt wird + 1

also nichts serverlastiges mehr

EDIT:

hab noch mit der einarbeitung probleme
im CMS was ich nutze läuft alles über ne index.html wo die php sachen dann über platzhalter der form [blub] eingebaut werden
für die uhr muss ja die serverzeit an das JS übergeben werden
muss ich den wert iwi escapen oder wie nimmt das script das ganze an weil
var blub = [time]; oder das ganze mit ’ oder " reagiert nicht

Hat das Skript nicht einen kumulierenden Fehler, von dem ich
sprach?
Man muß die anfängliche mit PHP ermittelte Zeit schon als
Konstante speichern beziehungsweise eben die Differenz zu der
Zeit des lokalen Rechners bei ‘onstart’ und dann diese jeweils
auf die aktuell ermittelte Zeit aufaddieren.
Das Skript ruft sich ja immer selbst mit einer Verzögerung auf.
Die Genauigkeit sollte nicht davon abhängen, wann oder in
welchem Zeitabstand sich das Skript selbst aufruft oder wielange
der browser braucht, um das Skript zu verarbeiten.

Wie irgendwo ziemlich zu Anfang gewünscht, wird dir so ein
Skript natürlich niemals die GMT liefern, sondern bestenfalls das,
was als Näherung für die UTC in die Rechner reingebastelt wurde,
was von der UTC allerdings signifikant abweicht, da diese
Rechnerzeit nicht ordentlich mit Schaltsekunden umgehen kann,
was aber gerade der Witz bei UTC ist und mehr noch bei GMT.

kk dann setz ich mich doch nochmal ran das hauptproblem is aber grade die php sachen mit in das JS einzuarbeiten siehe edit vom letzten post

Warum geht es denn nicht, wenn du in einer
Initialisierungsfunktion die Zeiten vergleichst:

var lokaleZeit = new Date();
var serverZeit = <?php echo time() * 1000 ?>;
var Differenz = serverZeit - lokaleZeit;

Der Kram wäre dann einmalig ‘onload’ auszurechnen.

In der rekursiv aufgerufenen Funktion müßte man dann
ja nur noch jeweils die Differenz zur aktuellen Zeit hinzuaddieren:

var aktuelleZeit = new Date() + Differenz;

Darauf sollte man dann getDate etc anwenden können.

Da ich mich nie mit java-script beschäftigt habe, ist das natürlich
alles nur geraten und ich persönlich würde dafür ohnehin kein
java-script verwenden ;o)

nachdem ich das thema erst aufgeschoben hab bin ich jetzt wieder hier gelandet ^^
das hauptproblem ist nach wie vor die ausgabe
mein cms funzt so dass es ne index.html über php aufruft und mit inhalten versieht
in die index.html direkt kann man kein php schreiben

der content wird so gesteuert dass in einer php datei funktionen definiert werden die dann über platzhalter in der index.html ausgegeben werden.
für die zeitausgabe sähe das so aus:

[code]function clock_time()

{
$clock_time = time();
return $clock_time;
}[/code]

setz ich nun an irgendne stelle in der index.html [clock_time] hin kommt an der stelle die ausgabe der dazugehörigen funktion.

die uhr funzt teilweise wenn ich den time string im JS und in der div wo das JS ausgegeben wird ausgebe oO
und auch dann zeigt es manchmal die uhr und manchmal den timestring an.

kann das unter iwelchen umständen dazu führen dass die zeit aus dem element in dem eig. ausgegeben werden soll ausgelesen wird?
es funzt wirklich nur wenn ich den string an beiden stellen ausgebe
und dann auch nur manchmal und das scheinbar zufällig

hier mal der gesamte code (ja es ist nicht die optimale variante beim zeit berechnen aber ich wollte erstmal die ausgabe sicher hinkriegen)

[code]

[clock_time]
[/code] in der unten geposteten div. wird jetzt mal die uhr angezeigt und mal der timestamp, system konnte ich nicht erkennen. lass ich die div. leer oder füll sie nur mit   kommt die uhr gar nicht

das ganze funktioniert nur manchmal beim ersten laden nicht, das clientseite weiterladen geht ohne probleme.
es liegt also iwie am konvertieren des php time strings.
wie kann das zustandekommen?

So löse ich es:

[quote]

Uhrzeit des Webservers mit Javascript und PHP dynamisch anzeigen Uhrzeit: [/quote]

das ist schonmal etwas was jedes mal funzt thx ^^
geht aber bei mir auch nur wenn ich einmal beim headteil im script die server zeit * 1000 ausgebe und gleichzeitig im body bereich im element mit der ID “uhrzeit” auch die serverzeit.
geb ich da nix oder irgendwas anderes aus kommt die uhr nicht.

außerdem erscheint das ganze erst wenn die seite fertig geladen hat vorher steht noch der time string da den ich ausgebe(n muss?)

wär besser wenn da nix ist bis die uhr kommt hab kA warum es bei mir nicht anders geht.

wie schreib ich das ganze jetzt um wenn ich statt den ziffern über array gesteurte bilder ausgeben will? brauch da immer ewig um mich in sowas reinzulesen wenn ich kein plan von habe

edit: hab jetzt ne lösung gefunden. die php zeit lässt sich bei meinem CMS anscheinend nur einbinden wenn sie auch im body eingebunden ist. ist sie nur im head bereich wird nix ausgegeben.