JavaScript: Wie etwas zu tun, zu jeder vollen Stunde?
Möchte ich ausführen, einige JS-code alle Stunde. Aber ich kann nicht mit
setInterval("javascript function",60*60*1000);
weil ich will es tun, jede volle Stunde, ich meine, in 1:00, 2:00, 3:00 und so weiter. Ich denke über so etwas wie
var d;
while(true) {
d = new Date();
if ((d.getMinutes() == '00') && (d.getSeconds() == '00')){
//my code here
}
}
aber es ist zu langsam und es funktioniert nicht gut.
Thak Dank für alle Ideen
- "zu langsam" wäre ein Euphemismus, richtig? Das würde komplett einfrieren Ihrem browser für immer!!!
- Was ist der Kontext? Scheint, wie es vielleicht eine schönere Lösung auf dem server mit einem Cron-job oder so etwas.... aber schwer zu sagen, w/o zu wissen, was es ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde herausfinden, was Zeit ist es jetzt, herauszufinden, wie lange es bis zur nächsten vollen Stunde, dann so lange warten. So,
Check für
e < 100
ist sicherzustellen, dass Sie das nicht tunsetTimeout
auf so etwas wie 5 ms und erhalten Sie einen crazy loop.Was Sie tun können, ist ein Intervall jede minute ausführen, und überprüfen, ob die Zeit ist
:00
vor dem ausführen des eigentlichen Codes.Blick auf diese ein :
Könnte man es machen, von den clearing-und Einstellung der Intervall-jedes mal. Es ist nur so, dass erste mal, anstatt das Intervall als eine Stunde, es wäre eine Stunde minus die Zeit in Minuten und Sekunden:
Das einzige problem mit diesem ist, dass schließlich wird es wahrscheinlich anfangen zu Driften...die Lösung wäre, nur tun die gleiche Sache in der Funktion, wie Sie tun, wenn Sie, treten Sie aus:
Hier ist ein proof-of-concept, dass updates jede minute (ich wollte nicht warten, eine ganze Stunde um zu testen, mein code!): http://jsfiddle.net/dRsua/
Dies ist, wie ich würde es darum gehen, aufbauend auf der vorherigen Antwort:
Diese Weise können Sie beginnen, beenden Sie alle Funktion vom laufen auf der vollen Stunde.
Verwendung:
Ein einfacher Weg wäre, um kontinuierlich eine Kontrolle auszuführen, um zu erkennen, Wann die Stunde verpasst:
Wenn man es jeden zweiten wie oben das script auslösen eine Sekunde in die neue Stunde, spätestens.
Ich denke, diese Methode ist robust und leicht zu verstehen, und aus performance-Sicht sollte es nicht wirklich ein Problem auf, führen Sie diese einfachen check einmal pro Sekunde.
Müssen Sie zum ausführen einer setInterval-Funktion jede minute (oder jeden zweiten, je nachdem, wie genau Sie möchten, dass Ihre timer), und führen Sie Ihren code, wenn Minuten sind null (btw bekommen Minuten gibt eine Zahl zwischen 0 und 59)..
Wenn Sie nicht wollen, um einen Intervall-laufen in jeder Sekunde/minute zu, nachdem Sie festgestellt, dass Sie auf die volle Stunde können Sie einfach auslösen eines neuen stündlichen Intervall und klar der erste.
War auch auf der Suche für diese, basierend auf Mark ' s Antwort, ich wrotethis:
Könnten Sie so etwas wie die untenstehende Funktion, die sehr einfach an Ihre Bedürfnisse anzupassen.
Berechnet es wie lange, bis das nächste Intervall, und dann re-führen Sie das Skript, nachdem es ausgeführt wurde, jedes mal, wenn (es sei denn, Sie die 3. argument true).
Beispiel: