Обратный отсчёт времени на странице

Нужно сделать обратный отсчёт времени на странице. Когда времени больше не осталось, таймер должен остановиться.
Имеется глобальная переменная 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 часов, сколько-то минут сколько-то секунд.
Не понимаю, почему :thinking:

Браузеры могут уменьшать приоритет, тормозить и т.д. такие таймеры когда вкладка неактивна.
Но если тут нет вычислений типа “+1 сек при каждом выполнении”, то не должно быть проблем.
Вроде еще где-то могут переполниться миллисекунды, если значение где-то ограничено 32 битами.

:thinking:
Похоже, надо ещё проверить, что дата Х больше текущей. Иначе, после дедлайна difference получается Dec 31 1969 23:59:59 и продолжает тикать.