Online Stopwatch & Timer
A precise stopwatch with lap times, plus a countdown timer with alarm — all in one.
A stopwatch seems like the simplest possible tool until you learn how browser timing actually works, at which point most online stopwatches turn out to be subtly wrong. The naive approach — adding one second every time a timer fires — drifts, because browsers throttle timers in background tabs, delay them under load, and never guarantee exact intervals. After ten minutes, a naive stopwatch can be seconds off. This one takes the correct approach: it records the moment you press start and continuously computes the elapsed difference from the system clock, so the display can lag but the measurement cannot drift. It also supports laps, which measure what interval training and process timing actually need.
How the stopwatch works
Press start, and the stopwatch stores a high-resolution timestamp. From then on, every screen update recalculates elapsed time as the difference between now and that stored moment — the display refreshes many times per second, but even if the tab is throttled or frozen, the arithmetic stays exact. Lap records the current total without stopping the clock, so you get both the split (time since last lap) and the cumulative total. Pause stores the accumulated time; resume starts a fresh segment and adds it on.
Why timestamp math beats tick counting
Naive (drifts):
every 1000 ms → seconds = seconds + 1
✗ background tabs throttle to 1 tick/minute
✗ each delayed tick becomes permanent error
Correct (this tool):
start = performance.now()
elapsed = performance.now() − start
✓ display may stutter, measurement cannot driftThe difference matters most in background tabs. Browsers deliberately slow timers on inactive tabs to save battery — down to once per minute, or fully suspended. A tick-counting stopwatch loses all of that time permanently. A timestamp-based one shows the correct total the instant you return to the tab, because it never relied on the ticks in the first place. `performance.now()` also provides sub-millisecond precision and is immune to system clock changes, which `Date.now()` is not.
What to know about timing
- 1Laps have two readings, and both matter. The split shows the time for the segment just finished; the cumulative shows total elapsed. Interval runners watch splits to hold pace; a process audit needs cumulative to find where the time went. Confusing the two makes lap data useless, which is why this stopwatch shows both.
- 2Human reaction time puts a floor on manual timing accuracy. Pressing a button in response to an event adds 150–250 milliseconds each way, and it varies between attempts. For anything under about ten seconds, that error is a meaningful fraction of the measurement — which is why sports moved to automatic timing decades ago.
- 3Your stopwatch keeps counting in background tabs correctly here, but browser notifications may not fire on time. If you need an alert at a specific elapsed time, keep the tab visible or use a countdown timer with sound — background throttling delays the notification, not the measurement.
- 4For repeated measurements, take several and look at the spread. A single timed run of anything — code, a commute, a process — is one sample of a distribution. Three to five runs reveal whether your 4:12 was typical or lucky, and the difference between conclusions drawn from one sample versus five is the difference between anecdote and data.
- 5Precision and accuracy are different failures. This stopwatch is precise to milliseconds, but if you press start late, the measurement is precisely wrong. For events with defined starts — a video, a race broadcast — sync to the event's own clock rather than your reflexes.
Frequently asked questions
Does the stopwatch keep running if I switch tabs?
Yes, and this is the point of the timestamp design. The measurement is the difference between now and the recorded start moment, so nothing is lost when the browser throttles the inactive tab — the display simply catches up the instant you return. A tick-counting stopwatch, by contrast, permanently loses whatever time the throttled ticks missed.
How accurate is a browser stopwatch?
The underlying clock, `performance.now()`, is accurate to well under a millisecond, though browsers round it slightly to mitigate timing-attack risks. In practice the measurement is far more accurate than the human operating it: your start and stop presses each carry 150–250 ms of reaction time. For manual timing, the browser is not the weak link — you are.
What is the difference between lap time and split time?
Terminology varies, but conventionally the lap (or split) is the duration of the segment just completed — since the previous lap press — while the cumulative time is the total since start. A runner doing 400 m repeats reads laps to check each repeat's pace and the cumulative to know total session time. This stopwatch records both for every lap press.
Why does the display sometimes stutter?
Screen updates compete with everything else the browser is doing, so under load the refresh can momentarily skip frames. This is cosmetic: the elapsed time is recomputed from the start timestamp on every frame, so a stuttering display still shows the correct value whenever it does update. The measurement and the rendering are deliberately decoupled.
Can I use this for scientific or sports timing?
For informal use, absolutely — the clock itself is millisecond-precise. For anything official, no manual stopwatch qualifies, because human reaction time dominates the error budget. Athletics requires automatic timing for records precisely because manual timing is reliably 0.2–0.3 seconds optimistic. Use this for training, cooking, meetings, and process timing; use instrumented timing for records.