2015-11-09 7 views
0

В настоящее время я выполняю функцию с регулярным интервалом по часам.Функция запуска в заданном интервале только в определенное время суток

setInterval(function(){ do_this(); } , 1000*60); 

К сожалению, это не совсем то, что я хочу. Я бы хотел, чтобы эта функция выполнялась с установленным регулярным интервалом с утра 09:00 до 1800 часов. Функция не должна работать за пределами этих часов. Как это можно сделать в node.js? Существуют ли удобные модули или функции для использования?

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours – pawel

+1

Почему 2 отрицательные голоса? Пожалуйста, объясните, что не так с этим вопросом, чтобы я мог улучшить свои будущие вопросы. – user781486

+1

Ну, вы знаете, как запланировать что-то, что произойдет через некоторое время, и вы, вероятно, знаете, как получить текущее время, так что ... в чем вопрос? Если это вопрос рекомендации по структуре/библиотеке, это не по теме. В противном случае покажите попытку решить проблему. * (не мой dv, но я их понимаю) * –

ответ

4

Вы можете просто проверить, не находится ли текущее время в пределах требуемого временного интервала или нет, и использовать это, чтобы решить, следует ли выполнять вашу функцию или нет.

setInterval(function(){ 
    var hour = new Date().getHours(); 
    if (hour >= 9 && hour < 18) { 
     do_this(); 
    } 
} , 1000*60); 

Эта функция будет работать каждую минуту между часами 9:00 и 18:00.

+0

Спасибо. Почему я не подумал об этом? !! Это выглядит так просто :) – user781486

2

Есть ли какая-то конкретная структура, с которой вы работаете?

Если мы столь абстрактны, как это, вы, скорее всего, захотите использовать что-то вроде cronjob. Там есть модуль для этого: https://github.com/ncb000gt/node-cron

Шаблон для того, что вы хотите:

00 00 9-18 * * * - Это будет побежал каждый час между 9-18 ровно 0 минут и 0 секунд.

+0

'1000 * 60' каждые 60 секунд ;-) – Cerbrus

+0

@Cerbrus Shh .. Я бы ожидал, что OP действительно выполнит какую-то работу. Я не сказал, что он делает именно то, что ему нужно, чтобы сделать :) Я думаю, он по-прежнему будет с «setInterval()». – Andrius

+1

Хотя я могу оценить стимул заставить его кое-что узнать, кроны могут быть совершенно новыми для него. Я думаю, что более образовательным обеспечить рабочий cronjob, объясняя, что каждый из параметров. Тем не менее, +1 для альтернативы. – Cerbrus

1

Проверьте текущий час внутри вашей функции do_this.

function do_this(){ 
    var now = new Date(); 
    var currentHour = now.getHours(); 
    if(currentHour < 9 && currentHour > 18) return; 
    //your code 
} 

setInterval(function(){ do_this(); } , 1000*60);