das ist ja eine besondere Art von JavaScript-Programmierung
Manche würden es einfach Pfusch nennen
Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.
Sie haben schon ein Benutzerkonto? Melden Sie sich hier an.
Jetzt anmeldenHier können Sie ein neues Benutzerkonto erstellen.
Neues Benutzerkonto erstellendas ist ja eine besondere Art von JavaScript-Programmierung
Manche würden es einfach Pfusch nennen
An für sich ist das korrekt, ja. Aber warum ich nicht einfach TIME_NOW_CP = TIME_NOW verwende: Würde ich das tun, würde ich nur eine Referenz auf die ursprüngliche Variable erzeugen. Änderungen an der "neuen" Variable führen zumindest in Javascript dazu, dass auch die "alte" Variable verändert wird. Dadurch hättest du aber nichts gewonnen, weil ja vermieden werden soll, dass die Variable TIME_NOW verändert wird. Das slice(0) ist ein kleiner Hack, um das Problem zu umgehen. Allerdings funktioniert das nur bei Strings, also muss der Integer erst in einen String gecastet werden und am Ende wieder in einen Integer, weil sich mit Strings immer schlecht rechnen lässt.
Gibt sicherlich noch schönere Wege. Das hier ist mir nur als erstes eingefallen
Extrem geil ist die Methode nicht und es wäre möglich, dass das Verändern von TIME_NOW irgendwelche Seiteneffekte erzeugt, die ich nicht bedacht habe. Wenn du auf Nummer sicher gehen willst, ersetze
function clock() {
TIME_NOW++;
var time = new Date(TIME_NOW*1000),
hours = time.getHours(),
minutes = time.getMinutes(),
seconds = time.getSeconds();
document.querySelectorAll('.headerDataClock')[0].innerHTML = createClock(hours) + ":" + createClock(minutes) + ":" + createClock(seconds);
function createClock(standIn) {
if (standIn < 10) {
standIn = '0' + standIn
}
return standIn;
}
}
setInterval(clock, 1000);
Alles anzeigen
durch:
var TIME_NOW_CP = parseInt(TIME_NOW.toString().slice(0), 10);
function clock() {
TIME_NOW_CP++;
var time = new Date(TIME_NOW_CP*1000),
hours = time.getHours(),
minutes = time.getMinutes(),
seconds = time.getSeconds();
document.querySelectorAll('.headerDataClock')[0].innerHTML = createClock(hours) + ":" + createClock(minutes) + ":" + createClock(seconds);
function createClock(standIn) {
if (standIn < 10) {
standIn = '0' + standIn
}
return standIn;
}
}
setInterval(clock, 1000);
Alles anzeigen
Dann muss jetzt mal der proSidor schauen, ob die Anzeige jetzt passt,.....
Nein, tut sie nicht. Also nicht direkt. Ist aber meine Schuld. Ich habe Quatsch erzählt Denn TIME_NOW ist ja statisch und ändert sich nicht.
Füg mal über var time = new Date(TIME_NOW*1000), noch ein: TIME_NOW++;
genau 2 Stunden und nicht irgendwie das 1.000stel? Wenn es um den Faktor 1000 zu gering wäre?
Und wieso passt es bei mir?
Die 2 Stunden ergeben sich aus der Zeitzone des Besuchers. Mit der von mir vorgeschlagenen Änderung wird immer die Serverzeit verwendet, unabhängig vom Standort des Besuchers und damit auch unabhängig von der dortigen Zeitzone.
Aber da war ja schon in der Funktion der Faktor 1000 versteckt, oder nicht?
Die 1000, von denen du sprichst, sind die Millisekunden bis zur Aktualisierung der Anzeige, also 1 Sekunde (wie wir gelernt haben, entspricht 1 Sekunde 1000 Millisekunden... ^^).
Die einzige Änderung am Template wäre also, aus var time = new Date(), das zu machen: var time = new Date(TIME_NOW * 1000),
Ansonsten alles so lassen, wie es ist und einfach den Besucher damit leben lassen, dass sein Rechner oder Browser falsch konfiguriert ist
Wie heißt das Template?
Also wenn das da der aktuelle Code ist, hast du nicht das umgesetzt, was ich vorgeschlagen habe
Unix Timestamp (TIME_NOW) = Sekunden
Javascript = Millisekunden
Unix Timestamp * 1000 = Millisekunden
Einfach im betreffenden Template das new Date() ersetzen durch new Date(TIME_NOW * 1000).
Dadurch wird nicht mehr die Zeit des Browsers verwendet, sondern die Server-Zeit.