是否可以根据时间调用setInterval?

时间:2015-12-10 09:43:38

标签: javascript

我正在我的网站上显示实时新闻,为了获取最新数据我每隔9分钟使用一次setInterval,如下所示

$(document).ready(function() {
    displaylivenews();
    setInterval(displaylivenews, 540000);
});



function displaylivenews() {
alert('calling ajax to getting latest data ');
}

所有这一切都很好,我的问题是,如果时间是在早上7点到9点之间,我想更频繁地称它为每5分钟一次?

是否可以根据时间调用setInterval?

http://jsfiddle.net/mwv6r0df/

1 个答案:

答案 0 :(得分:3)

回答您的问题,您可以执行以下操作:

function getRefreshPeriod()
{
    var hour = new Date().getHours();
    return (hour >= 7 && hour < 9) ? 300000 : 540000;
}

function displaylivenews() {
    alert('calling ajax to getting latest data ');
    setTimeout(displaylivenews, getRefreshPeriod());
}

setTimeout(displaylivenews, getRefreshPeriod());

我使用setTimeout来正确处理&#34; border&#34;案例。
例如,如果用户在上午08:46打开页面,他将在08:51(5分钟后),08:56,09:01,09:10(9分钟后,因为它不是&#34;黄金时间&#34;再见)。

但请注意, setIntervalsetTimeout并不保证准确。最好计算下次更新的时间,并依赖它。

另一个重要提示: new Date()将返回客户的当地时间。实际上,新闻将在当地时间早上7点到9点之间更频繁地更新。如果您拥有来自不同时区的用户,并希望他们在您的时区上午7点到9点之间更频繁地接收新闻,那么您可能需要使用getUTCHours

例如,我位于GMT + 6时区,如果我有这个网站,那就是:

var hour = new Date().getUTCHours();
return (hour >= 1 && hour < 3) ? 300000 : 540000; 

因为1AM和3AM UTC是UTC + 6的上午7点和9点。