Skip to content Skip to sidebar Skip to footer

How To Call A Function Every Hour?

I am trying to update information from a weather service on my page. The info should be updated every hour on the hour. How exactly do I go about calling a function on the hour eve

Solution 1:

You want to check out setInterval: https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval

It's a little hard to tell what you're trying to call with your code, but it would be something in the form of:

function callEveryHour() {
    setInterval(yourFunction, 1000 * 60 * 60);
}

If you want it every hour, try something like:

var nextDate = newDate();
if (nextDate.getMinutes() === 0) { // You can check for seconds here toocallEveryHour()
} else {
    nextDate.setHours(nextDate.getHours() + 1);
    nextDate.setMinutes(0);
    nextDate.setSeconds(0);// I wouldn't do milliseconds too ;)var difference = nextDate - newDate();
    setTimeout(callEveryHour, difference);
}

Now, this implementation checks the time once, sets the delay (or calls the function immediately), and then relies on setInterval to keep track after that. An alternative approach may be to poll the time every x many seconds/minutes, and fire it .getMinutes() == 0 instead (similar to the first part of the if-statement), which may sacrifice (marginal) performance for (marginal) accuracy. Depending on your exact needs, I would play around with both solutions.

Solution 2:

Here is what should work (JSFiddle):

functiontick() {
  //get the mins of the current timevar mins = newDate().getMinutes();
  if (mins == "00") {
    alert('Do stuff');
  }
  console.log('Tick ' + mins);
}

setInterval(tick, 1000);

Solution 3:

What you probably want is something like that:

var now = newDate();
var delay = 60 * 60 * 1000; // 1 hour in msecvar start = delay - (now.getMinutes() * 60 + now.getSeconds()) * 1000 + now.getMilliseconds();

setTimeout(functiondoSomething() {
   // do the operation// ... your code here...// schedule the next ticksetTimeout(doSomething, delay);
}, start);

So basically the first time the user get the access, you need to know what is the delay in millisecond to the next "hour". So, if the user access to the page at 8:54 (with 56 seconds and 123 milliseconds), you have to schedule the first execution after around 3 minutes: after the first one is done, you can call it every "hour" (60 * 60 * 1000).

Solution 4:

EDIT: Oops, I didn't see the " o' clock" things, so I edit my answer :

var last_execution = newDate().getTime();
functiondoSomething(force){
  var current_time = newDate().getTime();
  if (force || (current_time.getMinutes() == 0)
  {
    last_execution = current_time;
    // something// ...
  }
  setTimeout(doSomething(false), 1000);
}
// force the first timedoSomething(true); 

Solution 5:

// ... call your func nowlet intervalId;
let timeoutId = setTimeout(() => {
  // ... call your func on end of current hour
  intervalId = setInterval(() => {
     // ... call your func on end of each next hours
  }, 3600000);
}, ((60moment().minutes()) × 60 × 1000) - (moment().second() * 1000));

Post a Comment for "How To Call A Function Every Hour?"