Das liegt ganz einfach daran das man bei setTimeout einstellt warte 1000
milli sekunden, also 1 Sekunde. Dann geht er hoch , aber das
aktualisieren dauert einen bruchteil einer 1 Sekunde , dieses summiert sich dann im Laufe der Zeit ganz einfach.
Zu ersterem , ein neuladen einer funktion kann sich mit setTimeout erzwingen.Und zwar ist das alles JavaScript.
Ich habe da mal was vorbereitet wie mein Timer aussieht. Zugegeben der
return Wert der Funktion ist ein wenig arg, sollte ich dann bei Gelegenheit
noch einmal auslagern in eine JS Datei.
PHP-Code:
<?php
// timer tests
function Timer($seconds)
{
return '
<script type="text/javascript" language="JavaScript">
var seconds;
var minutes;
var hours;
var days;
setSeconds('.$seconds.');
function setSeconds(seconds)
{
this.seconds = seconds
if(this.seconds > 0)
{
timer();
}else
{
var TimerElement = document.getElementById("TIMER");
TextNode = "die Zeit ist abgelaufen";
var TextNode = document.createTextNode(TextNode);
TimerElement.appendChild(TextNode);
}
}
function init()
{
this.seconds -= 1;
if(this.seconds >= 0)
timer();
else
machwas();
}
function timer()
{
second = this.seconds%60;
minute = Math.floor(this.seconds/60)%60;
hour = Math.floor(this.seconds/(60*60))%24;
day = Math.floor(this.seconds/(60*60*24));
drawTime(day,hour,minute,second);
}
function drawTime(d,h,m,s)
{
var TimerElement = document.getElementById("TIMER");
if(TimerElement.firstChild)
TimerElement.removeChild(TimerElement.firstChild);
//Ausgabe formatieren
if(d < 10)
d = "0"+d;
if (h < 10)
h = "0"+h;
if (m < 10)
m = "0"+m;
if (s < 10)
s = "0"+s;
TimerText = d+":"+h+":"+m+":"+s;
var Text = document.createTextNode(TimerText);
TimerElement.appendChild(Text);
setTimeout("init()",1000);
}
function machwas()
{
setSeconds(0);
}
</script>';
}
//aufruf mittels
Timer(1561564);
//oder mit
$seconds = mktime(16,0,0,7,21,2006)-time();
Timer($seconds);
?>
Alles was Du nun noch benötigst wäre eine kleine HTML Datei , wo
irgendwo ein Element wie <span> oder
oder was weiss ich die ID
TIMER hat.
Das wäre alles , und wie man sehen kann 2 % PHP und 98% JavaScript,
wobei ich sagen will das ich in JS nicht wirklich gut bin , von daher kann
dieses ein wenig wirr erscheinen.