2017-01-19 2 views
0

Ich habe eine Funktion, die alle 3 Minuten 24/7 mit setTimeout() läuft. Das Problem besteht darin, dass Daten von einer API abgerufen werden, für die maximal ein Monat angefordert wurde. Ich möchte es so oft wie möglich laufen lassen, aber es ist unnötig, dies zu tun, wenn ich wegen der Verschwendung von Anfragen schlafe. Wie kann ich zusätzlich nur mein Skript zwischen zB 06:30:00 und 20:00:00 ausführen?Wie function() häufig zu bestimmten Tageszeiten in Javascript ausgeführt werden

Antwort

1

Sie beide brauchen SetTimeout und Date() dies zu erreichen: für z.B.

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); 

Weitere Details folgen Sie bitte this

+0

Dank! Kannst du weiter erklären, wie das funktioniert. Ich verstehe, dass das Skript erst um 10 Uhr beginnt, aber wann wird es aufhören und wie mache ich es, wenn ich eine andere Start- und Endzeit haben möchte? – jaikl

+0

@jaikl Sie können die Startzeit einstellen, indem Sie Werte in [Date()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) ändern: 'new Date (year , Monat [, Datum [, Stunden [, Minuten [, Sekunden [, Millisekunden]]]]]); ' – emme

+0

@jaikl Und zu Ende muss ** MillisTill10 ** Wert entsprechend der Zeit geändert werden, die Sie es starten möchten nochmal. Sie können auch [setInterval()] (https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval) verwenden. – emme

0

habe ich getestet und überprüft Code folgen. Meins ist 7:22 PM, was unter diesen Timings fällt und es sehr gut ausführt.

// 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

Verwandte Themen