2015-12-10 2 views
0

Я отображение живой новости на моем сайте, и для того, чтобы получить последние данные я использую setInterval на каждые 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/

ответ

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 для того, чтобы правильно обрабатывать "пограничные" случаи.
Например, если пользователь открывает страницу в 08:46, он получит обновления в 08:51 (5 минут спустя), 08:56, 09:01, 09:10 (через 9 минут, потому что это а не «прайм-тайм»).

Однако, имейте в виду, что setInterval и setTimeout не гарантируют, чтобы быть точным. Лучше всего рассчитать время следующего обновления и положиться на него.

Еще одно важное замечание:new Date() вернется местное время клиента. Так, на самом деле, новости будут обновляться чаще между 7AM и 9AM местного времени. Если у вас есть пользователи из разных часовых поясов и вы хотите, чтобы они чаще получали новости от 7AM до 9AM в вашем часовом поясе, вы можете использовать getUTCHours.

Например, я нахожусь в GMT + 6 часового пояса, и если у меня был этот сайт, он будет:

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

, потому что 1 утра и 3 утра UTC являются 7 АМ и 9 утра в UTC + 6.

+0

Большое спасибо ......... – Pawan