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.

War es hilfreich?

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());
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top