André Laugks: getTime() - Millisekunden auswerten

Hallo!

Ich habe eine Script geschrieben, was die Zeitdiffernz zwischen "jetzt" und z.B. dem 28.Mai 2000 10 Uhr berechnet!
Diesen String muß ich jetzt aber in eine vernünftige Zeitangabe umsetzen und zwar Tage, Stunden, Minuten, Sekunden. Das mache ich, in dem ich die Milisekunden durch 1000, 60, 24 usw. teile.
Ich muß eine Uhr erstellen, die rückwärts läuft, also ein Countdown, der so aussehen soll: 70 Tage 5 Stunden 10 Minuten 6 Sekunden. Das ganze soll dann wie die Uhr in selfhtml(DHTML) laufen, was kein Problem ist.

Was ist nun mein Problem!?
Ich rechne die Stunden aus, und bekomme einen Wert von z.B. 250 Stunden. In den 250 Stunden sind ja auch die Tage enthalten, und zwar 10 Tage und eine Zahl zwischen 23 und 1, hier also sind es 10 Stunden. Ich habe nun also die "wahren" Stunden rausgefunden.
Das ganze ziehe ich mit eine Schleife durch, siehe Script. Ich ziehe von den Stunden so lange 24 Stunden(1Tag) ab, bis die Zahl kleiner 24 ist. Das eigentliche Problem sind die Sekunden. Der InternetExplorer zeigt alles sofort an, Netscape braucht aber 5-6 Sekunden, bis er den Text schreibt. Ich denke, das liegt an der Schleife für die Sekunden. Gibt es eine Möglichkeit die Werte ohne Schleife zu ermitteln, also mit einer Formel z.B. oder einen Trick? Ich meine im Matheunterricht, es ist Jahre her, hat der Lehrer das mal gemacht!

var ende = new Date("May 28, 2000 10:00:00");
var jetzt = new Date();
e = ende.getTime();
j = jetzt.getTime();
var ist = e - j;

tage = Math.floor((ist/(1000*60*24*60)));
stunden = Math.floor((ist/(1000*60*60)));
minuten = Math.floor((ist/(1000*60)));
sekunden = Math.floor(ist/1000);

for(var i = 0; i < 1000; i++) { if(stunden >= 24) { stunden = stunden - 24; } else { break; } }
for(var i = 0; i < 1000; i++) { if(minuten >= 60) { minuten = minuten - 60; } else { break; } }
for(var i = 0; i < 100000; i++) { if(sekunden >= 60) { sekunden = sekunden - 60; } else { break; } }

document.write("Tage: " + tage + "<br>");
document.write("Stunden: " + stunden + "<br>");
document.write("Minuten: " + minuten + "<br>");
document.write("Sekunden: " + sekunden + "<br>");

mfg, André Laugks

  1. ReHallo!

    Einen muß ich noch drauf setzen! Diese Berechnung der Zeitdifferenz erfolgt nur einmal, nicht jede Sekunde. Wenn ich die Zahlen habe, ziehe ich jede Sekunde einfach immer -1 ab, und das je nach Zeit auch bei den Stunden, Tagen und Minuten. Eigentlich muß mich die Verzögerung von NN nicht jucken. Würde gern mal wissen, ob es auch ohne Schleifen geht.

    mfg, André Laugks

    1. »»Würde gern mal wissen, ob es auch ohne Schleifen geht.

      hi, andre

      aber na klar geht das:

      var ende = new Date("May 28, 2000 10:00:00");
      var jetzt = new Date();
      e = ende.getTime();
      j = jetzt.getTime();
      var ist = (e - j)/1000;

      tage = Math.floor(ist/86400); //Sekunden pro Tag
      stunden = Math.floor((ist%=86400)/3600); //Sekunden pro Stunde
      minuten = Math.floor((ist%=3600)/60); //Sekunden pro Minute :-)
      sekunden = Math.floor(ist%=60); //Restsekunden

      document.write("Tage: " + tage + "<br>");
      document.write("Stunden: " + stunden + "<br>");
      document.write("Minuten: " + minuten + "<br>");
      document.write("Sekunden: " + sekunden + "<br>");

      der NN verzoegert zwar trotzdem noch...weiss der Geier wieso...?!?

      cua

      n.d.p.

  2. Hi,

    Schleife zu ermitteln, also mit einer Formel z.B. oder einen
    Trick?

    Der Modulo-Operator macht genau das, was du willst ,) Modulo gibt
    den Rest einer Ganzzahldivision zurueck. Wenn du also 49 Mod 24
    rechnest, gibt das 1 (49 / 24 = 2, Rest 1)

    Rechne doch einfach

    stunden = stunden % 24;
    minuten = minuten % 60;
    sekunden = sekunden % 60;

    Dann wird solange dividiert, bis der Rest kleiner 24, bzw 60 ist.
    Also genau dasselbe, was du mit deinen Schleifen machst ,)

    Ich meine im Matheunterricht, es ist Jahre her, hat der
    Lehrer das mal gemacht!

    *g* eigentlich steht das sogar in SelfHTML, Abschnitt Operatoren.

    mfg
    CK1

    1. Hallo!

      *g* eigentlich steht das sogar in SelfHTML, Abschnitt Operatoren.

      Ich habe mit allem gerechnet, einer 10m langen Formel z.B., aber nicht mit einem Operator. Mir war noch
      nie so klar, was der Modulo-Operator für eine Aufgabe hat. Jetzt weis ich es mit Sicherheit. <g>
      Meine Uhr läuft jetzt auch schön rückwärts, also ist mein Tageswerk geschaft!

      Guten Nacht, André Laugks

      1. Hi,

        Ich habe mit allem gerechnet, einer 10m langen Formel z.B., aber
        nicht mit einem Operator. Mir war noch nie so klar, was der
        Modulo-Operator für eine Aufgabe hat. Jetzt weis ich es mit
        Sicherheit. <g>

        *gg* ich kenn das Gefuehl nur ZU genau *gg*

        Meine Uhr läuft jetzt auch schön rückwärts, also ist mein
        Tageswerk geschaft!

        na also, das ist doch die Hauptsache *g*

        mfg
        CK1