我正在我的网站上显示实时新闻,为了获取最新数据我每隔9分钟使用一次setInterval,如下所示
$(document).ready(function() {
displaylivenews();
setInterval(displaylivenews, 540000);
});
function displaylivenews() {
alert('calling ajax to getting latest data ');
}
所有这一切都很好,我的问题是,如果时间是在早上7点到9点之间,我想更频繁地称它为每5分钟一次?
是否可以根据时间调用setInterval?
答案 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;再见)。
但请注意, setInterval
和setTimeout
并不保证准确。最好计算下次更新的时间,并依赖它。
另一个重要提示: 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点。