用于在特定时间以毫秒运行函数的脚本

时间:2017-09-19 22:57:54

标签: javascript html

我在下面有代码,如何在21:36:00:500(500毫秒)运行?

var now = new Date();

var millisTill1 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 45, 30, 500) - now;
if (millisTill1 < 0) {
     millisTill1 += 86400000;
}
setTimeout(function() {
  check()
}, millisTill1);

2 个答案:

答案 0 :(得分:0)

你不能用setTimeout做到这一点。 setTimeout函数要求您以毫秒为单位传递第二个参数(在您的示例中称为millisTill1)。

大多数浏览器的最低阈值为10毫秒,这意味着你不能低于10000微秒或0.01秒。

虽然JS不适合这种情况,但最常见的任务是让你到达你需要去的地方最有可能使用setInterval,看起来像:

(setInterval(function() {
  var currentTime = new Date();
  if (
    currentTime.getHours() === 1 &&
    currentTime.getMinutes() === 38 &&
    currentTime.getSeconds() === 0 &&
    currentTime.getMilliseconds() === 500
  ) {
    // your code
  }
}, 500))();

每次轮询时间间隔过去,都会检查时间。最常见的是1分钟(60000)。您可以降低,但风险性能问题。不要忘记在客户端上运行javascript。如果你要使用setTimeout,那么只会检查一次,你的脚本就会停止。

如果您需要执行某些操作,最好使用Windows上的Task Scheduler或OSX上的Automator等系统调度程序与bash或python等脚本语言的组合。

答案 1 :(得分:0)

我已经测试了这段代码1分钟的计时器执行它的工作原理。它也只是增加了执行一次的时间限制。请考虑这段代码。

tDate = new Date();
tDate.setHours(21);
tDate.setMinutes(36);
tDate.setSeconds(0);
tDate.setMilliseconds(500);

tMillis = tDate - new Date();

if (tMillis < 0)
  tMillis = tMillis + 24 * 60 * 60 * 1000; // if time is greater than 21:36:00:500 just add 24 hours as it will execute next day 

setTimeout(function() {
  console.log('Execute');
}, tMillis)

您可以使用提前1分钟计时器来确认输出。