+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;
}
}
-$(function() {
- $('.timer').each(function(item){
+$(() => {
+ $('.timer').each(item => {
update_timer(item);
- setInterval(function(){update_timer(item)}, 1000);
+ 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();
});