Нужно сделать обратный отсчёт времени на странице. Когда времени больше не осталось, таймер должен остановиться.
Имеется глобальная переменная let timer
. Перед запросом на сервер, выполняется код:
if (timer) {
clearInterval(timer);
timer = null;
}
Когда с сервера приходит ответ, выполняется код:
...
if (nodeFormatGroupList.childNodes.length > 0 && jStreamingData.expiresInSeconds) {
const lifeTimeSeconds = typeof(jStreamingData.expiresInSeconds) === "string" ?
Number.parseInt(jStreamingData.expiresInSeconds) : jStreamingData.expiresInSeconds;
if (typeof(lifeTimeSeconds) === "number") {
const expirationDate = new Date();
expirationDate.setSeconds(expirationDate.getSeconds() + lifeTimeSeconds);
const nodeExpirationDate = document.createElement("div");
const display = () => {
const currentDate = new Date();
const difference = new Date(expirationDate - currentDate);
const formatted = formatTime(difference);
if (formatted[1] >= 0) {
nodeExpirationDate.textContent = `Ссылки действительны до '${expirationDate.toLocaleString()}', Осталось: ${formatted[0]}`;
}
return formatted[1];
}
timer = setInterval(() => {
if (timer && display() <= 0) { clearInterval(timer); timer = null; return; }
}, 1000);
display();
nodeFormatGroupList.appendChild(nodeExpirationDate);
}
}
...
function formatTime(date) {
const h = date.getUTCHours();
const m = date.getUTCMinutes();
const s = date.getUTCSeconds();
const seconds = h * 3600 + m * 60 + s;
return [seconds > 0 ? `${h}:${m.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}` : "0:00:00", seconds];
}
Константа lifeTimeSeconds
это количество секунд. Обычно, это 21540
. Если перевести во время, это 5:59:00
. Это время надо добавить к текущему и запустить отсчёт.
Когда страница открыта - всё нормально. Но если надолго свернуть браузер или надолго переключиться на другую вкладку (например, вечером сделать запрос, свернуть браузер, а утром открыть), то отсчёт начинает выдавать какую-то хрень. Например, 10 часов, сколько-то минут сколько-то секунд. Или 17 часов, сколько-то минут сколько-то секунд.
Не понимаю, почему