Проблема в том, что вы только когда-либо сравниваете значение d
в пределах интервала, и оно никогда не меняется Чтобы это исправить, вам просто нужно заменить d
на new Date()
или new XDate()
, если вы предпочитаете использовать эту библиотеку:
current_time = new XDate().toString("yyyy-MM-dd HH:mm:ss");
Кроме того, в вашем * довольно много переменных 1015 *, которые не нужны и могут быть удалены. Попробуйте это:
jQuery(window).on("load", function() {
let future_time = parseISOLocal(new XDate(new Date("2020-05-01 12:24:23").addDays(2)).toString("yyyy-MM-dd HH:mm:ss"));
function Repeat() {
setInterval(function() {
let current_time = new XDate().toString("yyyy-MM-dd HH:mm:ss");
$('#timeForSign').html(formatDHMS(future_time - parseISOLocal(current_time)));
}, 100);
}
setTimeout(Repeat, 500);
});
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
function parseISOLocal(s) {
var b = s.split(/\D/);
return new Date(b[0], b[1] - 1, b[2], b[3], b[4], b[5]);
}
function formatDHMS(ms) {
let addS = (n) => n == 1 ? '' : 's';
let d = ms / 8.64e7 | 0;
let h = (ms % 8.64e7) / 3.6e6 | 0;
let m = (ms % 3.6e6) / 6e4 | 0;
let s = (ms % 6e4) / 1e3 | 0;
let t = [
d + ' day' + addS(d),
h + ' hour' + addS(m),
m + ' minute' + addS(h),
s + ' second' + addS(s)
];
return ms > 0 ? t.join(', ') : "Time is over";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/xdate@0.8.2/src/xdate.js"></script>
<div id="timeForSign"></div>