Ho sviluppato un dashboard dell'applicazione Web e mi chiedevo come rilevare che è mezzanotte per reimpostare alcuni array che contengono dati del giorno precedente utilizzando jquery o momentjs.Modo migliore per rilevare la mezzanotte e ripristinare i dati
risposta
Usa moment().format("h:mm:ss")
che restituisce il tempo in un formato h:mm:ss
.
var midnight = "0:00:00";
var now = null;
setInterval(function() {
now = moment().format("h:mm:ss");
if (now === midnight) {
alert("Hi");
}
$("#time").text(now);
}, 1000);
Un modo migliore sarebbe quello di calcolare i secondi fino a mezzanotte. Questo è leggibile con MomentJS molto semplice e umano:
// returns the number of seconds until next midnight
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds');
Quindi, basta fare:
setTimeout(
midnightTask,
moment("24:00:00", "hh:mm:ss").diff(moment(), 'seconds')
);
function midnightTask() {
/* do something */
}
La seconda soluzione (setTimeout) non funzionerà se il computer si spegne e riprende molto più tardi. In tali casi, il trigger verrà ritardato di circa il tempo impiegato dal computer in modalità di sospensione. –
vorrei provare:
window.setInterval(resetAtMidnight, 1000*5) // every five seconds
function resetAtMidnight() {
var now = new Date();
if(now.getHours() < 1
&& now.getMinutes() < 1
&& now.getSeconds() < 5) {
redrawPage();
}
};
Perché rendere la CPU più difficile del necessario. 1000 * 5 = 5000, perché non basta passare in 5000 –
Questa ripetizione o eseguirà la funzione una sola volta, dopo un ritardo di 5 secondi? – gibberish
@gibberish - questo verrebbe eseguito una sola volta, per ripetere l'uso di 'setInterval' (o chiamare di nuovo' setTimeout') – Jamiec
C'è veramente solo due modi per ottenere questo
- sondaggio ogni x secondi e vedere se siamo entro x secondi dalla mezzanotte
- calcolare il tempo tra oggi e la mezzanotte, e dormire per quel lasso di tempo prima di eseguire
(1) è stata dimostrata in altre risposte, ecco (2).
La prima cosa da fare è calculate the number of milliseconds until midnight quindi utilizzarlo come parametro per javascript setTimeout
.
setTimeout(function(){
// whatever you want to do at midnight
}, msToMidnight);
Dopo aver finito il lavoro in quella funzione, si potrebbe desiderare di recaculate il tempo fino prossimo mezzanotte e ripetere il processo.
Creare un appuntamento a mezzanotte di questa mattina, aggiungi 86400 secondi, e impostare un timeout per poi:
new Date(Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000)
Ecco come ci si utilizza:
var delay_to_midnight = Date.parse((new Date()).toString().replace(/\d\d:\d\d:\d\d/,'00:00:00')) + 86400 * 1000 - Date.now()
var timeoutid = window.setTimeout(function() { alert("It's midnight!"); }, delay_to_midnight);
Così si pensa' andando su questo nel modo sbagliato. Quello che stai cercando non è quando è mezzanotte, vuoi solo sapere quando il giorno è cambiato, il che è un compito molto più semplice.
La prima cosa che dirò è evitare l'uso dei timer a tutti i costi. Non ne vale la pena. Il risultato in termini di prestazioni e il tempo extra della CPU che si ottiene dall'esecuzione della stessa funzione> 3600 volte al giorno sono ridicoli, specialmente quando è in esecuzione sul computer di qualcun altro. Non sai quanto può gestire, quindi supponi che non possa gestire molto. Vacci piano con i tuoi utenti.
Vorrei suggerire l'ascolto di un evento di input dell'utente, supponendo che questo è qualcosa che avrebbe su un normale computer, e non something like this, dove non c'è l'input dell'utente.
Se gli eventi di input dell'utente sono qualcosa che si poteva fare affidamento su, vorrei fare questo ..
var today = new Date(), lastUpdate;
window.addEventListener("mousemove", function() {
var time = new Date();
// If we haven't checked yet, or if it's been more than 30 seconds since the last check
if (!lastUpdate || (time.getTime() - lastUpdate.getTime()) > 30000) {
// Set the last time we checked, and then check if the date has changed.
lastUpdate = time
if (time.getDate() !== today.getDate()) {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
}
}
})
Se è assolutamente necessario utilizzare un timer, quindi vorrei fare questo ..
function init() {
var today = new Date();
var midnight = new Date();
midnight.setDate(today.getDate() + 1)
midnight.setHours(0)
midnight.setMinutes(0)
setTimeout(function() {
// If the date has changed, set the date to the new date, and refresh stuff.
today = time
this_is_where_you_would_reset_stuff()
init()
}, midnight.getTime() - today.getTime())
}
init()
Ricorda che la seconda via probabilmente sarà molto meno affidabile.
Il problema con questo approccio è che questo dashboard deve essere visualizzato in un monitor e l'utente vede solo i dati che cambiano. Ma grazie per il tuo suggerimento –
- 1. Bisogno modo migliore per riassumere i dati
- 2. Il modo migliore per ripristinare automaticamente un database ogni ora
- 3. Il modo migliore per rilevare IronPython
- 4. Qual è il modo migliore per "ripristinare" le modifiche?
- 5. Il modo migliore per memorizzare i dati in BoltDB
- 6. C'è un modo migliore per raccogliere i dati di Twitter?
- 7. Il modo migliore per salvare i dati su iOS?
- 8. WebClient è il modo migliore per scaricare i dati http?
- 9. La migliore struttura dati per i dati della serie storica
- 10. modo migliore per conservare i dati in MySQL indicazioni
- 11. Il modo migliore per salvare i dati in un'applicazione Java?
- 12. modo migliore per gestire i dati degli attributi in Slim
- 13. Richiesta di archiviazione dei dati necessaria: il modo migliore per archiviare la posizione + i dati temporali?
- 14. Il modo migliore per registrare i dati POST in Apache?
- 15. Il modo migliore per memorizzare i dati gerarchici in hbase
- 16. OpenCV: Il modo migliore per rilevare gli angoli sulla scacchiera
- 17. Come ripristinare i dati dal server DDMS e Ftp?
- 18. Gestione degli orari e dopo la mezzanotte
- 19. Qual è il modo migliore per determinare se System.DateTime è mezzanotte?
- 20. Qual è il modo migliore per rilevare il colore bianco?
- 21. il modo migliore per rilevare il browser in js
- 22. Qual è il modo migliore per rilevare l'eccezione nell'attività?
- 23. La migliore struttura dati per i seguenti vincoli?
- 24. Un modo migliore per aggregare i dati e mantenere i nomi di struttura di tabelle e colonne con i panda
- 25. createTouch vs ontouchstart - il modo migliore per rilevare i dispositivi touchscreen?
- 26. C'è un modo per ripristinare la build corrente in Jenkins?
- 27. Un modo migliore per controllare i parametri?
- 28. Il modo migliore per precaricare i tag immagine SVG?
- 29. PHP :: Il modo migliore per rilevare se la sessione di avvio
- 30. Un modo migliore per la subquery
Stai parlando di server o client? Non sono sicuro che tu voglia farlo sul client ... –
Sto parlando del cliente. L'unica cosa che non voglio è aggiornare la pagina. Quello che voglio, ad esempio, è questo: immaginando di avere un array con i dati, voglio resettare questo array. Inoltre, non desidero controllare (se possibile) ogni 5 secondi se si tratta di mezzanotte –
Ok, come si definisce * mezzanotte *? Questa ora è '0: 00'? –