Online Timer JavaScript
Display how long a visitor has been on your site using a small reusable timer
Script Title: Online Timer
Description: Show time on page for the current visitor
Description: Show time on page for the current visitor
Live Example
Starts when the page loads
Time on page
00:00:00
Running
Modern online timer snippet
Paste this inside your body It writes elapsed time into an element you choose
<div id="timeOnPage"></div>
<script>
(function () {
function pad(n) { return String(n).padStart(2, "0"); }
function formatElapsed(ms) {
var totalSeconds = Math.floor(ms / 1000);
var hours = Math.floor(totalSeconds / 3600);
var minutes = Math.floor((totalSeconds % 3600) / 60);
var seconds = totalSeconds % 60;
return pad(hours) + ":" + pad(minutes) + ":" + pad(seconds);
}
function createOnlineTimer(opts) {
var targetId = (opts && opts.targetId) ? opts.targetId : "timeOnPage";
var intervalMs = (opts && opts.intervalMs) ? opts.intervalMs : 1000;
var el = document.getElementById(targetId);
if (!el) return;
var start = Date.now();
var pausedAt = 0;
var pausedTotal = 0;
var t = null;
function render() {
var now = Date.now();
var elapsed = now - start - pausedTotal;
if (elapsed < 0) elapsed = 0;
el.textContent = formatElapsed(elapsed);
}
function startTimer() {
if (t) return;
if (pausedAt) {
pausedTotal += Date.now() - pausedAt;
pausedAt = 0;
}
t = setInterval(render, intervalMs);
render();
}
function pauseTimer() {
if (!t) return;
clearInterval(t);
t = null;
pausedAt = Date.now();
render();
}
function resetTimer() {
clearInterval(t);
t = null;
start = Date.now();
pausedAt = 0;
pausedTotal = 0;
render();
}
startTimer();
return { start: startTimer, pause: pauseTimer, reset: resetTimer };
}
createOnlineTimer({ targetId: "timeOnPage", intervalMs: 1000 });
})();
</script>
FAQ
By default it measures time on the current page For a site wide timer store the first visit time in localStorage and reuse it on each page
Yes Set intervalMs to 250 or 500 if you want smoother updates or leave it at 1000 for once per second updates.
No It uses plain JavaScript and works in modern browsers.