Chrischaaan: stoppuhr?

hallo

ich habe versucht in js ne stoppuhr zu machen.mit millisekunden anzeige.nun hab ich folgenden code kreiert:

<html>
<head>
<script>
<!--
function uhr ()
 {
   var i = 1;

var AktuellesDatum = new Date();

var milli          = AktuellesDatum.getMilliseconds();

var stunden = ((minuten  > 60) ? + 1 : 1);
       var minuten = ((sekunden  > 60) ? + 1 : 1);
       var sekunden = ((milli > 999) ? + 1 : 1);

window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;

window.setTimeout ('uhr()',i);
 }
-->
</script>
</head>
<body>
<FORM NAME="Datum">
<INPUT SIZE=10 NAME="Time" class="field">
<br>
<br>
<input value="Start" type="button" onClick="window.setTimeout ('uhr()',1000)" class="field">
</form>
</body>
</html>

meiner logik nach müßtes gehn aber es geht nicht.warum?

  1. <html>
    <head>
    <script>
    <!--
    var stunden, minuten, sekunden;
    var i = 0;
    var j = 0;
    var k = 0;
    var l = 0;
    function uhr()
     {
       i++

    var milli          = i;

    if (milli > 999)
     { j++; i = 0; }
    if (sekunden  > 59)
     { k++; j = 0; }
    if (minuten  > 59)
     { l++; k = 0; }

    sekunden = j;
    minuten = k;
    stunden = l;

    window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;

    window.setTimeout ('uhr()',i);
     }
    -->
    </script>
    </head>
    <body>
    <FORM NAME="Datum">
    <INPUT SIZE=10 NAME="Time" class="field">
    <br>
    <br>
    <input value="Start" type="button" onClick="window.setInterval('uhr()',1);" class="field">
    </form>
    </body>
    </html>

    1. Hallo !

      Diese Lösung ist nicht SEHR gut, da der Browser
      die Funktion nicht tausend mal in einer Sekunde
      ausführen kann. So werden also die Millisekunden
      nicht richtig gezählt. Hier wird je nach Prozessor
      unterschiedlich schnell gezählt.
      Das wirkt sich natürlich auf die Sekunden, dann auf
      die Minuten und dann auf die Stunden aus.

      Ein Beispiel:
      Ein guter Prozessor kann diese Funktion vielleicht
      300 mal in einer Sekunde starten.
      In 3 Sekunden ist der Timer also bei ungefähr einer
      Sekunde angelangt. In 3 Minuten ist der Timer bei
      einer Minute angelangt... in 3 Stunden zeigt der
      Timer dann nur eine Stunde an...

      CU !

      Martin

      1. tach

        heißt das ich brauch das garnicht erst zu versuchen weil dann die zeit ungenau wird?!

        1. naja, bei 100stel wird das möglich sein, ich hab ne ähnliche Uhr nur bei Sekunden, da gibt es eigentlich kein Prob. Vieleicht bei 10tel Millisekunden, naja, probier's halt aus, bei mir geht's irgendwie. :)

          1. hi

            mhhhhhh,naja.versuch mers mal.dein angebot sah ja auch nicht schlecht aus.und der zählt aber wirklich erst nach buttondruck los?!

            1. Probieren geht über studieren! ;)

  2. Hallo !

    Hier die einfachste Lösung:

    <html>
    <head>
    <script>
    <!--
    var stunden = 0;
    var minuten = 0;
    var sekunden = 0;
    var Datum = new Date();
    // diese Variablen dürfen nicht in der selben Funktion
    // bei jedem Aufruf neu dekliniert werden.

    //       var stunden = ((minuten  > 60) ? + 1 : 1);
    //       var minuten = ((sekunden  > 60) ? + 1 : 1);
    //       var sekunden = ((milli > 999) ? + 1 : 1);
    // Die Millisekunden können NIE größer als 999 sein, da sie dann wieder
    // zu 0 wechseln. Das gleiche gilt für die sekunden und minuten.

    function uhr ()
     {
       var AktuellesDatum = new Date();
       var Vergangen = new Date (AktuellesDatum - Datum);
       var milli          = Vergangen.getMilliseconds();
       var sekunden          = Vergangen.getSeconds();
       var minuten          = Vergangen.getMinutes();
       var stunden          = Vergangen.getHours() - 1;

    window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;

    window.setTimeout ('uhr()',1);
     }
    -->
    </script>
    </head>
    <body>
    <FORM NAME="Datum">
    <INPUT SIZE=10 NAME="Time" class="field">
    <br>
    <br>
     // Warum uhr() mit setTimeout mit einer Sekunde Verzögerung aufrufen ?
    <input value="Start" type="button" onClick="uhr()" class="field">
    </form>
    </body>
    </html>

    1. hi

      das klappt!
      DAAAAAAAAAAAAAAAAAAAAAAAAAAAAANKE!!!!*freuuuuuuuuu*

      bye,christian.

      1. Bitte *g*

        Ich habe es ja selbst an meinem Browser ausprobiert ;-)

        1. sorry.klappt doch nicht.jedenfalls nicht so wie ich mir das gedacht hab.
          mach mal die seite auf und warte dann eine beliebiebige zeit ab.ne minute oder so.dann setzt die uhr nicht bei 0 ein sondern später.

          und das sollte nicht sein.
          ich probier jetz nochmal den vorschlag von der andrn person...

          1. Hallo !

            Achso, ich habe etwas vergessen. Jetzt funktioniert es aber !

            Cu !

            Martin

            <html>
            <head>
            <script>
            <!--
            var Datum;
            function startuhr ()
            {
             Datum = new Date();
             uhr ();
            }
            // diese Variablen dürfen nicht in der selben Funktion
            // bei jedem Aufruf neu dekliniert werden.

            //       var stunden = ((minuten  > 60) ? + 1 : 1);
            //       var minuten = ((sekunden  > 60) ? + 1 : 1);
            //       var sekunden = ((milli > 999) ? + 1 : 1);
            // Die Millisekunden können NIE größer als 999 sein, da sie dann wieder
            // zu 0 wechseln. Das gleiche gilt für die sekunden und minuten.

            function uhr ()
             {
               var AktuellesDatum = new Date();
               var Vergangen = new Date (AktuellesDatum - Datum);
               var milli          = Vergangen.getMilliseconds();
               var sekunden          = Vergangen.getSeconds();
               var minuten          = Vergangen.getMinutes();
               var stunden          = Vergangen.getHours() - 1;

            window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;

            window.setTimeout ('uhr()',1);
             }
            -->
            </script>
            </head>
            <body>
            <FORM NAME="Datum">
            <INPUT SIZE=10 NAME="Time" class="field">
            <br>
            <br>
             // Warum uhr() mit setTimeout mit einer Sekunde Verzögerung aufrufen ?
            <input value="Start" type="button" onClick="startuhr()" class="field">
            </form>
            </body>
            </html>von der andrn person...

            1. hallo,

              bei mir steht dann sowas da wie
              großes N kleines a großes N doppelpunkt....
              (konnts nich reinkopieren:"das format dieses postings...."

              1. Komisch, bei mir funktioniert es.
                Das ist eigentlich der gleiche quelltext wie eben,
                der einzige Unterschied ist, dass ich das

                Datum = new Date();
                 uhr ();

                in eine eigene Funktion kopiert habe, die bei Klick gestartet
                wird. Versuch es doch nochmal reinzukopieren, weil es bei mir einwandfrei läuft. Was hast du denn für einen Browser ? Ich habe MSIE. Vielleicht liegt es daran, dass wir zwei verschiedene haben.
                CU !
                Martin

                <html>
                <head>
                <script>
                <!--
                var Datum;
                function startuhr ()
                {
                 Datum = new Date();
                 uhr ();
                }

                function uhr ()
                 {
                   var AktuellesDatum = new Date();
                   var Vergangen = new Date (AktuellesDatum - Datum);
                   var milli          = Vergangen.getMilliseconds();
                   var sekunden          = Vergangen.getSeconds();
                   var minuten          = Vergangen.getMinutes();
                   var stunden          = Vergangen.getHours() - 1;

                window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;

                window.setTimeout ('uhr()',1);
                 }
                // -->
                </script>
                </head>
                <body>
                <FORM NAME="Datum">
                <INPUT SIZE=10 NAME="Time" class="field">
                <br><br>
                <input value="Start" type="button" onClick="startuhr()" class="field">
                </form>
                </body>
                </html>

            2. hi nochmal,

              <!--
              var Datum;
              function startuhr ()
              {
               Datum = new Date();
               uhr ();
              }

              function uhr ()
               {
                 var AktuellesDatum = new Date();
                 var Vergangen = new Date (AktuellesDatum - Datum);
                 var milli          = Vergangen.getMilliseconds();
                 var sekunden          = Vergangen.getSeconds();
                 var minuten          = Vergangen.getMinutes();
                 var stunden          = Vergangen.getHours() - 1;

              window.document.Datum.Time.value=stunden+":"+minuten+":"+sekunden+":"+milli;
                         window.setTimeout ('uhr()',1);
               }
              -->

              ich glaube ich weiß woran das liegt mit den vielen n's und a's:
              new date()-new date()?
              jetz -jetz?
              was soll da rauskommen.

              kann man nicht nach deiner vorherigen methode das machen aber so das der halt die millisek und so nachm buttonclick in die var's lädt?

        2. hi

          was ich mir noch gedacht hab:
          man müßte bei onclick="..." das getMilliSeconds() machen und dann immer wieder prüfen wie viel seither vergangen ist.

          und dann hätte man keinen besuchszeitzähler mit 1000stel sekunden sondern ne stoppuhr.wie geht das??

          (denkt bitte nicht ich hab ahnung davon un will mir nur zeit sparen indem ich euch die arbeit machen lass.ich hab kaum ahnung von js und versuch da immer ein bissl was.....)