Oliver: setTimeout()

Ich habe mir ein fortlaufende Uhr mit Hilfe von javascript gebastelt, dummerweise geht sie aber nach einiger Zeit nach. Woran kann das liegen?
Muss ich vielleicht nicht 1000 Millisekunden sondern vielleicht nur 990 Ms einstellen?

<script type="text/javascript" language="javascript">
var stunde = <?php echo $stunde; ?>;
var minute = <?php echo $minute; ?>;
var sekunde = <?php echo $sekunde; ?>;
var stunden, minuten, sekunden;
function serveruhr()
{
 sekunde++;
 if(sekunde == '60')
 {
  sekunde = 0;
  minute++;
  if(minute == '60')
  {
   minute = 0;
   stunde++;
   if(stunde == '24')
   {
    stunde = 0
   }
  }
 }
 if(sekunde < 10){sekunden = "0" + sekunde;}else{sekunden = sekunde;}
 if(minute < 10){minuten = "0" + minute;}else{minuten = minute;}
 if(stunde < 10){stunden = "0" + stunde;}else{stunden = stunde;}

document.getElementById("zeit").innerHTML=stunden+":"+minuten+":"+sekunden;
 window.setTimeout("serveruhr()", 1000);
}
window.onload = serveruhr;
</script>

  1. Hi,

    Ich habe mir ein fortlaufende Uhr mit Hilfe von javascript gebastelt, dummerweise geht sie aber nach einiger Zeit nach. Woran kann das liegen?

    daran, dass die Ausführungszeit >0ms ist.

    Muss ich vielleicht nicht 1000 Millisekunden sondern vielleicht nur 990 Ms einstellen?

    Nein. 1000ms minus Ausführungszeit - welche bei jedem Durchlauf anders sein kann. Alternativ kannst Du übrigens auch die Differenz zum nächsten Zeitpunkt nehmen, an dem Du die Ausführung haben möchtest.

    var stunde = <?php echo $stunde; ?>;

    Das ist kein gültiger JavaScript-Code.

    document.getElementById("zeit").[...]

    Die Existenz dieser Methode darf nicht vorausgesetzt werden.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Ersteinmal danke für deine Antwort.

      function serveruhr()
      {
      var start = new Date();
      var startzeit = start.getTime();

      //Hier dann der Rest

      var stopp = new Date();
      var stoppzeit = stopp.getTime();
      var timeout = 1000-(stoppzeit-startzeit);
      window.setTimeout("serveruhr()", timeout);
      }

      So ist die Zeitdifferenz ca. 2-3ms. Die Uhr geht aber immer noch nach, wird die restliche Zeit bei der Funktion setTimeout() verloren? Ich habe es nicht geschaft die zeit der Fkt. setTimeout() zu messen, ist das möglich?

      1. Hi,

        var timeout = 1000-(stoppzeit-startzeit);

        versuche den zweiten von mir genannten Tipp, der ist genauer.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Weiß zwar nicht, woran es liegen könnte, aber warum liest Du nicht einfach beim User die aktuelle Zeit jede Sekunde aus, um sie zu benutzen?

    Vielleicht wars Dir ne Hilfe

    Chris

    1. Das geht nicht, da die Zeit bei allen Usern die selbe sein muss.

      1. Hi,

        Das geht nicht, da die Zeit bei allen Usern die selbe sein muss.

        no way.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes