glitchier-soc/public/clock.js

55 lines
1.4 KiB
JavaScript
Raw Normal View History

2017-05-29 03:09:12 +03:00
document.addEventListener("DOMContentLoaded", function(event) {
updateClock();
setInterval(updateClock, 1000);
});
2017-06-15 01:25:10 +03:00
function getNextOpen(now) {
var days = [[0, 14], [4, 18], [8, 22], [12], [2, 16], [6, 20], [10]]
var nowday = now.getUTCDay();
var nour = now.getUTCHours();
var open_hour = -1;
var d = 0;
while (open_hour == -1) {
var times = days[(nowday + d) % 7];
for (var i = 0; i < times.length; ++i) {
var time = times[i];
if (time == nour) {
return "refresh";
} else if (time > nour || d > 0) {
open_hour = time;
break;
}
}
if (open_hour == -1) {
d += 1;
nour = -1;
}
}
var open = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + d));
var ts = open.setUTCHours(open_hour);
return open;
}
2017-05-29 03:09:12 +03:00
function updateClock() {
var clock = document.querySelector(".closed-registrations-message .clock");
var now = new Date();
2017-06-15 01:25:10 +03:00
var open = getNextOpen(now);
if (open == "refresh") {
location.reload();
return;
2017-05-29 03:09:12 +03:00
}
2017-06-15 01:25:10 +03:00
2017-05-29 03:09:12 +03:00
var until = open - now;
var ms = until % 1000;
var s = Math.floor((until / 1000)) % 60;
var m = Math.floor((until / 1000 / 60)) % 60;
var h = Math.floor((until / 1000 / 60 / 60));
if (m < 10) m = "0" + m;
if (s < 10) s = "0" + s;
clock.innerHTML = h + ":" + m + ":" + s;
}