我在下面有代码,如何在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);
答案 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分钟计时器来确认输出。