+let offset = 0;
+
function update_timer(timer){
var start = parseInt(timer.dataset.start);
var stop = parseInt(timer.dataset.stop);
var value = parseInt(timer.dataset.value);
- var now = Math.floor(Date.now() / 1000);
+ var now = Math.floor(Date.now() / 1000) + offset;
var left = stop - now;
var total = stop - start;
value = Math.max(value * 3 / 10, value * left / total);
timer.innerHTML = Math.floor(value);
} else {
- var hours = left / 60 / 60;
+ var hours = Math.floor(left / 60 / 60);
hours = hours < 10 ? '0' + hours : hours;
- var minutes = left / 60 % 60;
+ var minutes = Math.floor(left / 60) % 60;
minutes = minutes < 10 ? '0' + minutes : minutes;
var seconds = left % 60;
seconds = seconds < 10 ? '0' + seconds : seconds;
}
}
-$(() => $('.timer').each(item => {
- update_timer(item);
- setInterval(() => update_timer(item), 1000);
-}));
+$(() => {
+ $('.timer').each(item => {
+ update_timer(item);
+ setInterval(() => update_timer(item), 1000);
+ });
+ let xhr = new XMLHttpRequest();
+ xhr.open('HEAD', '/');
+ xhr.onload = () => {
+ let srvtime = Date.parse(xhr.getResponseHeader('Date'));
+ offset = Math.ceil((srvtime - Date.now()) / 1000);
+ console.log("Offset from server: " + offset);
+ };
+ xhr.send();
+});