如何在一天中的指定时间运行JavaScript函数?

如何在一天中的指定时间运行JavaScript函数?,javascript,jquery,Javascript,Jquery,我需要每16分钟运行一次函数,但不是在用户进入页面时运行,而是在特定时间运行 例如:12:01、12:16、12:31、12:46、13:01、13:16、13:31等等 我该怎么做 updateTodayCharts = setInterval(function () { ajax_update( date1 , date2 ); }, 15 * 60 * 1000); 此脚本每15分钟运行一次ajax\u update。当您在12:20访问页面时,它将在12:35(12:20+15

我需要每16分钟运行一次函数,但不是在用户进入页面时运行,而是在特定时间运行

例如:12:01、12:16、12:31、12:46、13:01、13:16、13:31等等

我该怎么做

updateTodayCharts = setInterval(function () {
    ajax_update( date1 , date2 );
}, 15 * 60 * 1000);
此脚本每15分钟运行一次
ajax\u update
。当您在12:20访问页面时,它将在12:35(12:20+15分钟)运行

我需要在12:36运行这个脚本(所以11分钟后不是15分钟)


首先,我将计算从现在到下一次更新的时间,然后设置时间间隔时间。

检查每分钟的分钟数是否为1、16、31、46或您想要的任何值,但在这种情况下,分钟数模15必须等于1:

updateTodayCharts = setInterval(function () {
    var d = new Date(),
        min = d.getMinutes();
    if (min % 15 === 1) ajax_update( date1 , date2 );
}, 60 * 1000);

检查每分钟的分钟数是否为1、16、31、46或您想要的任何值,但在这种情况下,模数15的分钟数必须等于1:

updateTodayCharts = setInterval(function () {
    var d = new Date(),
        min = d.getMinutes();
    if (min % 15 === 1) ajax_update( date1 , date2 );
}, 60 * 1000);

有两种方法可以做到这一点,一种是存储最后一个日期,有一个较短的时间间隔,并检查是否已经过了足够的时间,另一种是将setTimeout与setInterval结合起来,或者类似的构造

var interval = (new Date().getUTCMinutes() + 59) % 15; // current position
interval = 15 - interval;   // remaining til next position
interval = interval * 60e3; // to ms

interval = window.setTimeout(function () {
    interval = window.setInterval(function () {
        ajax_update( date1 , date2 );
    }, 15 * 60e3);
}, interval);

有两种方法可以做到这一点,一种是存储最后一个日期,有一个较短的时间间隔,并检查是否已经过了足够的时间,另一种是将setTimeout与setInterval结合起来,或者类似的构造

var interval = (new Date().getUTCMinutes() + 59) % 15; // current position
interval = 15 - interval;   // remaining til next position
interval = interval * 60e3; // to ms

interval = window.setTimeout(function () {
    interval = window.setInterval(function () {
        ajax_update( date1 , date2 );
    }, 15 * 60e3);
}, interval);


你知道如何使用日期对象吗?使用一个小匹配,确定你需要设置的时间长度,以达到下一个16。啊,对了:d我没想过。你能翻译你问题的标题吗?制作一个函数来检查时间,最好是服务器,因为用户可以在不同的时区。你的时间间隔是15分钟,而不是16分钟。你知道如何使用日期对象吗?使用一个小匹配,确定你需要设置的时间长度,以达到下一个16。啊,对了:d我没想过。THX你能翻译你问题的标题吗?制作一个功能来检查时间,最好是服务器,因为用户可以在不同的时区。你的时间间隔是15分钟,而不是16分钟。SETINTERVAL不保证在提供的毫秒内发生,如果它刚好不够,会发生什么?那么它就在下一分钟,你不认为吗?我的意思是,如果它第一次发生在12:01:00.002,那么间隔时间是59997毫秒,而不是60000毫秒,这是个好问题,然后,我们拥有的setInterval函数将需要进行一些调整。但我们先看看它是否符合现在的要求
var-then=Date.now(),delta=0,int=window.setInterval(函数(){var-now=Date.now(),d=now-then-2e3;then=now;delta+=Math.abs(d);console.log(delta,d);},2e3)
setInterval不能保证精确地发生在所提供的毫秒,如果它刚好不足会发生什么?那么它会在下一分钟发生,你不这么认为吗?我的意思是,如果它第一次发生在,比如说
12:01:00.002
,那么时间间隔就需要
59997
ms,这不是一个好问题,而是我们的setInterval函数需要一些调整。但我们先看看它是否符合现在的要求
var-then=Date.now(),delta=0,int=window.setInterval(函数(){var-now=Date.now(),d=now-then-2e3;then=now;delta+=Math.abs(d);console.log(delta,d);},2e3)经过一点思考,我得出的解决方案是,直到下一个1,16。。。必须先计算一个setTimeout,然后是一个setInterval,但是你已经做了:-)经过一点思考,我得出了一个解决方案,偏移量直到下一个1,16。。。必须先计算setTimeout,然后再计算setInterval,但您已经这样做了:-)