var zielDatum=new Date(n.getYear(),n.getMonth(),n.getDay(),n.getHours(),n.getMinutes(),n.getSeconds());
Das geht einfacher: new Date(n);
// Countdown berechnen und anzeigen, bis Ziel-Datum erreicht ist
if(startDatum<zielDatum) { (...)
Auch das geht einfacher:
var diffms = Math.max(0, zielDatum - startDatum),
stunden = Math.floor(diffms/3600000),
minuten = Math.floor((diffms/60000)%60),
sekunden = Math.floor((diffms/1000)%60);
print(stunden+':'+minuten+':'+sekunden);
Dieses Statement ist mir in JS neu. Wahrscheinlich willst Du lieber die innerHTML-Eigenschaft des Timers (bzw. später der Timer) mit dem entsprechenden Inhalt füllen.
setTimeout('countdown()',200);
So oft ist das gar nicht nötig. Ein Mal pro Sekunde reicht, allerdings sollte dieses Mal mit dem Sekundenwechsel synchronisiert werden, d.h. Du startest das Script mit einem Timeout, der n ms wartet für n = 990 - (new Date()*1)%1000, also
// Wir können das auch gerne nachher noch objektorientiert kapseln, aber jetzt nehmen wir erst mal eine einfache Funktion:
function syncTimer() {
if (window.timerInterval) { window.clearInterval(timerInterval); }
window.setTimeout(runTimer, (990 - (new Date()*1)%1000));
}
Du solltest das Script sicherheitshalber alle 60 Minuten (3600 Sekunden) neu mit dem Sekundenwechsel synchronisieren.
Gruß, LX
RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.