是否可以基于时间调用setInterval

Is it possible to call setInterval based on time based?

本文关键字:时间 调用 setInterval 于时间 是否      更新时间:2023-09-26

我在我的网站上显示实时新闻,为了获得最新数据,我每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/

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

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是为了正确处理"边界"情况
例如,如果用户在上午08:46打开页面,他将在08:51(5分钟后)、08:56、09:01、09:10(9分钟后,因为现在不再是"黄金时段")获得更新。

但是,请记住setIntervalsetTimeout不能保证精确。计算下一次更新的时间并依赖它是一个更好的想法

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

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

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

因为UTC的凌晨1点和凌晨3点分别是UTC+6的上午7点和上午9点。