setTimeout, но на определенное время - PullRequest
7 голосов
/ 23 апреля 2009

Есть ли в JavaScript что-либо легкодоступное (т.е. не через "плагины"), которое позволяет мне делать что-то вроде setTimeout, но вместо того, чтобы говорить, через сколько миллисекунд что-то должно произойти, я даю ему объект даты, сообщающий, когда что-то сделать?

setToHappen(function () {
    alert('Wake up!');
}, new Date("..."));

И да, я знаю, что могу сделать это, просто вычтя new Date() из моего существующего объекта даты (или, может быть, это наоборот), чтобы получить количество миллисекунд, но я все еще хотел бы знать.

Ответы [ 3 ]

20 голосов
/ 23 апреля 2009

Вам нужно просто найти количество миллисекунд между текущим и вашим объектом даты.

function setToHappen(fn, d){
    var t = d.getTime() - (new Date()).getTime();
    return setTimeout(fn, t);
}
6 голосов
/ 23 апреля 2009

Нет, но вы можете легко написать свою собственную функцию. Просто вычислите разницу между настоящим моментом и данным моментом в миллисекундах и вызовите setTimeout с этим.

Примерно так:

 setToHappen = function(fn, date){
  var now = new Date().getTime();
  var diff = date.getTime() - now;
  return setTimeout(fn, diff);
 }

РЕДАКТИРОВАТЬ: убрал дополнительное умножение на 1000, спасибо Крису за то, что указал на это!

4 голосов
/ 23 апреля 2009

Поскольку люди говорят о вычислении интервалов времени ожидания с использованием объектов date, следует отметить, что в Firefox , максимальное значение setTimeout() для параметра интервала будет равно 2147483647 (2 ^ 31). - 1) поскольку PRIntervalTime является 32-разрядным целым числом со знаком. Это выходит чуть менее 25 дней.

...