SetTimeout aber für eine bestimmte Zeit
-
13-09-2019 - |
Frage
Gibt es etwas, leicht verfügbar in JavaScript (dh nicht durch „Plugins“), die mich so etwas wie setTimeout
erlaubt, zu tun, aber anstatt zu sagen, in wie viele Millisekunden etwas passieren soll, gebe ich ihm ein Objekt Datum es sagen, wann es zu tun etwas?
setToHappen(function () {
alert('Wake up!');
}, new Date("..."));
Und ja, ich weiß, ich kann dies tun, indem einfach new Date()
mit meinem vorhandenen Date-Objekt subtrahiert (oder vielleicht ist es umgekehrt), um die Menge von Millisekunden zu bekommen, aber ich würde noch gerne wissen.
Lösung
Sie müßten nur die Anzahl der Millisekunden zwischen jetzt und den geplanten Objekt finden.
function setToHappen(fn, d){
var t = d.getTime() - (new Date()).getTime();
return setTimeout(fn, t);
}
Andere Tipps
Nein, aber man konnte leicht eine eigene Funktion schreiben. Nur berechnet die diference zwischen jetzt und dem Zeitpunkt in Millisekunden und ruft SetTimeout damit.
So etwas wie folgt aus:
setToHappen = function(fn, date){
var now = new Date().getTime();
var diff = date.getTime() - now;
return setTimeout(fn, diff);
}
EDIT: entfernt die zusätzliche Multiplikation mit 1000, dank chris für den Hinweis, dass aus
Da die Menschen sprechen über die Berechnung Timeout-Intervalle date
Objekte verwendet wird, sollte beachtet werden, dass, in Firefox , der Maximalwert setTimeout()
wird für das Intervall Parameter akzeptieren ist 2147483647 (2 ^ 31-1) als PRIntervalTime
ist eine 32-Bit-Ganzzahl signiert. Das kommt auf knapp 25 Tage.
Sie können einfach Date.now()
ab dem Datum subtrahieren
const myDate = new Date('...');
setTimeout(func, myDate - Date.now());