Online stopwatch
STOPWATCH
- LAPSPLITTIME
What this stopwatch does
The stopwatch on this page counts up from zero, with hundredth-of-a-second precision. Press Start to begin. Press Lap to record a split time without stopping the clock. Press Reset to clear the laps and zero the display. The display uses tabular figures so the digits don't jump as the value changes.
It's a real stopwatch, not a polling display. The internal time is anchored to performance.now(), which is monotonic and unaffected by clock adjustments. That means if the system clock changes mid-run, the stopwatch keeps counting from where it was, and if the browser throttles the rAF loop in a background tab, the elapsed value is still correct when you come back.
Lap times and splits
Each Lap press appends a row to the laps list with three values: the lap number, the split (time since the previous lap), and the total elapsed time. That's the conventional layout for chronograph displays in athletics, motorsport, and time-trial cycling: a runner cares both about the individual lap and about the accumulating overall time.
Laps are stored in memory only. Reloading the page clears them. If you need lap times to persist, screenshot or copy them before reloading.
When to use a stopwatch vs. a timer
A stopwatch counts up from zero with no fixed end. A timer counts down from a duration you set and signals when it reaches zero. They're symmetric tools for opposite problems: how long is this taking versus how much time do I have left.
Use the stopwatch when you don't know in advance how long the activity will run, like a workout, a study session, a project task, or a recipe step. Use our online timer when you do know, like a 25-minute Pomodoro block, a 90-second plank, or a kitchen step that needs to come off the heat at exactly 6 minutes.
How accurate is it?
The display refreshes via requestAnimationFrame, which on modern browsers fires roughly 60 times a second, matching most displays' refresh rate. The internal timing is sub-millisecond accurate because performance.now() returns a fractional-millisecond timestamp.
What this won't get you: laboratory-grade timing for scientific use, ten-thousandths of a second for elite athletic timing, or guaranteed real-time guarantees in a heavily loaded browser tab. For those cases you want hardware timing. For everyday use the stopwatch is more than accurate enough.
Keyboard and accessibility
Every control is keyboard-reachable in tab order: Start, Lap, Reset. Buttons announce their state via aria-pressed attributes where relevant, and the display has an aria-live="polite" region so screen readers can read the elapsed time on request.
The tabular figures and the contrast between the digits and the background match WCAG AA at the default sizes. The clock works in light and dark mode and respects your prefers-color-scheme setting.
Related tools
The online timer is the countdown counterpart to this stopwatch. The named countdowns are useful when the target is a calendar moment rather than a fixed duration. The age calculator computes elapsed time from a birth date in years, months, weeks, days, hours and seconds. The how-long-until tool counts down to any future date.
A note on browser-tab throttling
Modern browsers throttle JavaScript timers in background tabs to save battery. For a stopwatch this would normally be a problem: the display would freeze and you'd think the elapsed time had stopped. Because the stopwatch reads performance.now() at render time rather than incrementing a counter on every tick, the display catches up immediately when you bring the tab back to the foreground. The total elapsed time is correct even if the rAF loop was paused for several minutes in the background.
Tips for getting the most out of a stopwatch
Treat the stopwatch as a measurement tool, not a behaviour-change tool. The number tells you what happened. What you do with that number, change your workflow, adjust your training, set a faster target, is the work the stopwatch can't do for you.
For repeatable measurements, like timing the same workout day over day or the same recipe step week over week, the lap function is your friend. Press Lap at each meaningful checkpoint and compare the split times across runs. The values stack up quickly into a useful personal benchmark.
For one-off measurements with a fixed start, like timing a meeting or a recurring task, just press Start at the beginning and read the total when you're done. Reset between sessions; the laps list is intentionally not persisted because most uses don't need it. If you want a persistent log, consider a dedicated activity-tracking app; this page is the equivalent of a stopwatch you'd grab off a coach's clipboard.
A short history of the stopwatch
The first mechanical stopwatch as we'd recognise it was patented by Nicolas Mathieu Rieussec in 1821, originally to time horse races. The word "chronograph" comes from the same era. Mechanical stopwatches dominated sports timing through the 20th century, gradually giving way to quartz electronics in the 1970s and 1980s, and finally to digital displays on phones and the web in the 2010s.
The visual conventions of a stopwatch, large central digits, separate splits, the start-lap-reset trio of controls, are inherited directly from those mechanical predecessors. We kept them because they work.
Frequently asked questions
- Does the stopwatch keep running if I switch tabs?
- Yes. The elapsed time is computed from performance.now() at render, so even if the browser throttles the animation frame in the background, the display catches up correctly when you return to the tab.
- How precise is the timing?
- Hundredths of a second on the display, sub-millisecond in the underlying calculation. Not suitable for laboratory or elite-athletic timing, but accurate enough for any everyday use.
- Can I save lap times?
- Not currently. Laps are stored in memory and cleared on reload. If you need a persistent record, screenshot or copy them before reloading.
- Does it work offline?
- Once the page has loaded, yes. The stopwatch is a small piece of JavaScript with no network calls during a run.