Sto tentando di implementare un timer per il conto alla rovescia in un momento specifico in futuro. Questo punto nel tempo è sempre lo stesso giorno della settimana e ora e si basa sull'ora UTC.Ottieni la ricorrenza successiva del giorno e dell'ora in javascript
Sto tentando di scrivere una funzione generale che, dato un giorno della settimana e un'ora, restituirà un oggetto data che rappresenta quei criteri in futuro.
Esempi:
getNextOccuranceOfUTCDayAndHour(1, 7);
ottenere il prossimo verificarsi di 07:00 il Lunedi. Se oggi è lunedì, 25/05/2015 a mezzanotte UTC, questa funzione dovrebbe restituire un oggetto Date che rappresenta lunedì 6/1/2015 alle 7.00 UTC.
getNextOccuranceOfUTCDayAndHour(3, 13);
ottenere il prossimo verificarsi di 13:00 il Mercoledì. Se oggi è martedì, 26/05/2015 a mezzanotte UTC, questa funzione dovrebbe restituire un oggetto Date che rappresenta mercoledì 27/05/2015 alle 13.00 UTC.
Ho tentato di scrivere una funzione per farlo e ho incluso lo snippet qui sotto, ma sembra funzionare solo per alcune date e non per altre. È incredibilmente inaffidabile. Preferirei non utilizzare Moment.js.
function getNextOccuranceOfUTCDayAndHour(day, hour) {
d = new Date();
d.setDate(d.getUTCDate() + (7 + day - d.getUTCDay()) % 7)
d.setUTCHours(hour, 0, 0, 0);
return d;
}
function format_seconds(t) {
var d = Math.floor(t/86400);
var h = Math.floor(t % 86400/3600);
var m = Math.floor(t % 3600/60);
var s = Math.floor(t % 3600 % 60);
return ((d > 0 ? d + " d. " : "") +
(h > 0 ? h + " h. " : "") +
(m > 0 ? m + " m. " : "") +
s + " s.");
}
function update() {
var next_occurance = getNextOccuranceOfUTCDayAndHour(1, 7);
$('#next_occurance').text(next_occurance);
var ms = next_occurance - new Date();
$('#countdown').text(format_seconds(Math.floor(ms/1000)));
}
$(function() {
update();
setInterval(update, 1000);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="next_occurance">Next Occurance</p>
<p id="countdown">Countdown</p>
Edit: Alcuni esempi di vs. previsto restituito valori. JSFiddle
Potrebbe includere alcuni esempi di date che funzionano e quelle che non lo fanno? – Xufox
Certo, ecco qui: https://jsfiddle.net/2j49q0ak/ –
Il secondo esempio restituisce lunedì per me (il mio fuso orario è UTC + 02: 00) ... anche con '.toUTCString()' alla fine di 'return d'. – Xufox