2017-01-19 3 views
0

У меня есть функция, которая работает каждые 3 минуты 24/7 с помощью setTimeout(). Проблема заключается в том, что он извлекает данные из API, у которых максимум запросов в месяц. Я хочу запускать его так часто, как может, но это необязательно делать, когда я сплю из-за пустой траты запросов. Как может, кроме того, запустить только мой сценарий, например, с 06:30:00 до 20:00:00?Как запустить функцию() часто в определенное время суток в javascript

ответ

1

Вы нужны как SetTimeout и Date() для достижения этой цели: для, например,

var now = new Date(); 
var millisTill10 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 10, 0, 0, 0) - now; 
if (millisTill10 < 0) { 
    millisTill10 += 86400000; // it's after 10am, try 10am tomorrow. 
} 
setTimeout(function(){alert("It's 10am!")}, millisTill10); 

Для получения более подробной информации, пожалуйста, следуйте this

+0

Спасибо! можете ли вы еще больше объяснить, как это работает. Я понимаю, что сценарий не начнется, пока не будет 10 утра, но в какое время он остановится и как я это сделаю, если захочу разное время начала и окончания? – jaikl

+0

@jaikl Вы можете установить время начала, изменив значения в [Дата()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date): 'new Дата (год) , month [, date [, hours [, minutes [, seconds [, milliseconds]]]]]); ' – emme

+0

@jaikl И для завершения нужно изменить значение ** millisTill10 ** в зависимости от времени, которое вы хотите запустить еще раз. Также вы можете использовать [setInterval()] (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval) – emme

0

Я испытал и проверил следующий код. Шахта - 7:22 вечера, которая подпадает под эти тайминги, и она выполняется очень хорошо.

// get todays strict timings 
 
// 06:30:00 and 20:00:00 
 

 
setInterval(function() { 
 
    lowerDate = new Date(); 
 
    lowerDate.setHours(6); 
 
    lowerDate.setMinutes(30); 
 
    lowerDate.setSeconds(0); 
 

 

 
    upperDate = new Date(); 
 
    upperDate.setHours(20); 
 
    upperDate.setMinutes(0); 
 
    upperDate.setSeconds(0); 
 

 
    todayDate = new Date(); 
 

 
    if (todayDate > lowerDate && todayDate < upperDate) 
 
    console.log("execute"); // execute only if in between these times 
 
}, 3 * 60 * 1000) //Every 3 minutes

 Смежные вопросы

  • Нет связанных вопросов^_^