Ich bin ein Sitzung Timeout als Teil einer Webanwendung mit der MomentJS-Bibliothek erstellen. Was ich bisher (unten) habe, ist der Unterschied zwischen timeToExpire
(in Sekunden) seit der Anmeldung des Benutzers und dem Ablauf der Sitzung. Wenn jedoch eine Countdown-Uhr unter Verwendung von setInterval
angezeigt wird, wird die diff
NICHT jede Sekunde neu berechnet und stattdessen wird die Uhr nie aktualisiert.MomentJS Countdown mit Diff
Kann mir jemand in die richtige Richtung zeigen, was falsch läuft?
const access_ttl = 3600;
const now = moment();
const login_timestamp = moment('2017-02-19 17:31:58+00:00');
const expire_timestamp = login_timestamp.add(access_ttl, 's');
const timeToExpire = expire_timestamp.diff(now, 'seconds');
function displayClock(inputSeconds) {
const sec_num = parseInt(inputSeconds.toString(), 10);
const hours = Math.floor(sec_num/3600);
const minutes = Math.floor((sec_num - (hours * 3600))/60);
const seconds = sec_num - (hours * 3600) - (minutes * 60);
let hoursString = '';
let minutesString = '';
let secondsString = '';
hoursString = (hours < 10) ? "0" + hours : hours.toString();
minutesString = (minutes < 10) ? "0" + minutes : minutes.toString();
secondsString = (seconds < 10) ? "0" + seconds : seconds.toString();
return hoursString + ':' + minutesString + ':' + secondsString;
}
function timer() {
$('.output').html(`Expires in: ${displayClock(timeToExpire)}`)
}
setInterval(timer, 1000)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<div class="output"></div>
Es gibt sehr viel einfacher Countdown-Timer, z.B. [* Der einfachste mögliche JavaScript-Countdown-Timer? *] (Http://stackoverflow.com/questions/20618355/the-simplet-possible-javascript-countdown-timer). Beachten Sie, dass * setInterval * nicht genau mit der angegebenen Verzögerung läuft, so dass Ihre Uhr langsam driftet und von Zeit zu Zeit eine Sekunde lang zu überspringen scheint. – RobG