(function () { type second = number; type millisecond = number; const relative = new Intl.RelativeTimeFormat("en", { localeMatcher: "best fit", numeric: "always", style: "long", }); const date = () => { [...document.querySelectorAll("time")] .forEach( (element) => { try { const time: millisecond = new Date(element.dateTime) || new Date(); const interval: second = ((new Date().getTime() - time.getTime()) / 1000); const seconds: number = Math.floor(interval); const minutes: number = Math.floor(seconds / 60); const hours: number = Math.floor(minutes / 60); const days: number = Math.floor(hours / 24); if (Math.sign(seconds) === 1) { if (seconds <= 60) { return element.textContent = relative.format(-1 * seconds, "second",); } if (minutes <= 120) { return element.textContent = relative.format(-1 * minutes, "minute",); } if (hours <= 48) { return element.textContent = relative.format(-1 * hours, "hour",); } if (days <= 60) { return element.textContent = relative.format(-1 * days, "day",); } } if (Math.sign(seconds) === -1) { if (-1 * days >= 60) { return element.textContent = relative.format(-1 * days, "day",); } if (-1 * hours >= 48) { return element.textContent = relative.format(-1 * hours, "hour",); } if (-1 * minutes >= 120) { return element.textContent = relative.format(-1 * minutes, "minute",); } if (-1 * seconds >= 0) { return element.textContent = relative.format(-1 * seconds, "second",); } } } catch (error) { console.error( "Error: Unable to resolve relative time format!", error, ); } }, ); } const substitution = setInterval(date, 4); self.addEventListener("load", () => { setTimeout(() => { clearInterval(substitution); setInterval(date, 1000); }, 1000); }); })();