Skip to main content

Stopwatch

Precise online stopwatch with start, stop, reset and lap time recording. Centisecond accuracy.

Reviewed by · Last reviewed

00:00.00

How to Use the Stopwatch

  1. Click Start to begin counting up from 00:00:00.00. The large monospace display shows hours, minutes, seconds, and centiseconds.
  2. Press Lap while the stopwatch is running to record a split. Each lap shows its own elapsed time and the total since Start, so you can compare consecutive intervals side by side.
  3. Use Stop to pause the timer without losing the accumulated time, then Resume when you are ready to pick up where you left off.
  4. Hit Reset to return everything to zero. This clears the lap list, so copy anything you need first.
  5. Select and copy lap times directly from the on-screen list if you want to move them into a spreadsheet or training log.

What This Tool Does and How It Works

A stopwatch measures elapsed time with no upper bound - you tell it when to start, when to split, and when to stop, and it tells you how long each of those intervals took. Under the hood it holds a single anchor timestamp captured with performance.now() when you click Start. Every animation frame it reads performance.now() again and subtracts, producing the on-screen value. Because performance.now() returns a high-resolution monotonic reading that is independent of wall-clock jumps (NTP sync, daylight-saving changes, manual clock adjustments) the count stays accurate across all of those events.

Updates are driven by requestAnimationFrame rather than setInterval, which gives a smoother visual tick on 60 Hz and 120 Hz displays and lets the browser pause painting when the tab is hidden without corrupting the underlying count. Laps are simply snapshots of the current elapsed value pushed into an array; the previous-lap delta is computed on render. Nothing is persisted - the whole state lives in component memory and disappears when you close the tab.

When You Would Reach for the Stopwatch

  • Timing interval runs, swim sets, or cycling intervals where you need per-lap splits and a running total.
  • Measuring how long a real task actually takes so you can estimate future work better - a quick reality check against the "this will only take ten minutes" instinct.
  • Running a boardroom speaking-time check where you split on each speaker change and can see at the end who dominated the discussion.
  • Cooking multi-stage recipes where absolute elapsed time matters but you also want to know how long the sear took relative to the reduction.
  • Timing children\'s games, classroom activities, or debate rounds where a visible counter keeps the group honest.
  • Benchmarking something manual (a build, a backup, a data import) before you bother wiring up a proper profiler.

Common Pitfalls and Edge Cases

The most common mistake is confusing the stopwatch with a countdown timer and expecting it to fire at a specific time - it does not; it counts up indefinitely. A second pitfall is reading centisecond precision as accuracy: the display updates at 1/100s, but the actual timing resolution depends on your display refresh rate and the requestAnimationFrame cadence, so trusting the last digit for serious athletic timing is a mistake. Very long sessions (multiple hours) keep working but the display wraps from mm:ss into hh:mm:ss as expected. Switching tabs pauses the paint loop but not the underlying timestamp arithmetic, so the count is correct when you return even though the digits appear frozen while hidden. Finally, if the device sleeps mid-run, most browsers keep performance.now() progressing during sleep, so on wake you see the full elapsed including the nap.

Stopwatch Timing in a Nutshell

Mechanical stopwatches began as chronographs in the late 1700s and were standardized for sport around the 1868 Olympic precursors; digital quartz stopwatches took over in the 1970s, and every modern phone, smartwatch, and browser now ships a stopwatch mode. The "lap" versus "split" distinction is worth knowing: a split time is cumulative total elapsed at the moment you press the button, while a lap time is the delta since the previous split. This tool shows both. Web browsers expose two timing APIs - Date.now() which returns a Unix epoch millisecond and can jump backward if the system clock is corrected, and performance.now() which returns a monotonic high-resolution value anchored to navigation start. For stopwatch work, only the monotonic one is safe, which is why this implementation uses it.

Comparison to Alternatives

A dedicated sports watch (Garmin, Suunto, Apple Watch) beats this tool for athletic use because it does not sit on a web tab that can be closed, survives gloves and rain, and can persist sessions to a training log. The macOS and iOS Clock apps offer a near-identical stopwatch with the advantage of backgrounding via system-level timers. A physical mechanical stopwatch is still used in track and field judging because electronics can fail - but it tops out at a single elapsed value per button press. Against those options, this browser tool wins when you need a zero-install, shareable-screen timer during a video call or classroom session, and when you want lap times visible at the same size as the running total. For sub-centisecond accuracy - drag racing, electronic speed traps, microbenchmarks - none of these manual tools is appropriate; you need a hardware timer instead.

Frequently Asked Questions

What is the underlying timing accuracy?

The stopwatch reads performance.now(), which most browsers expose at 0.1-1 ms resolution depending on the engine and security mitigations (Firefox and Safari clamp it for timing-attack protection). The display is rounded to the nearest centisecond, so the last digit is reliable to roughly plus or minus 5 ms. For human reaction-time activities this is more than enough; for sub-millisecond measurement you need hardware instrumentation.

Does the stopwatch keep running if I switch tabs or lock my phone?

Yes. The elapsed time is derived from an anchor timestamp rather than counted tick by tick, so the paint loop pausing in a background tab does not lose time. When you return the display snaps to the correct total. On most platforms performance.now() continues to advance during brief device sleep, so a short screen lock is invisible to the timer.

How does Lap differ from Split?

Split time is the total elapsed from Start to the moment you pressed the button. Lap time is the delta between the current split and the previous one - the duration of the interval you just finished. This tool shows both: each entry displays the lap duration with the cumulative total next to it, which is the convention used by running watches and swimming pace clocks.

Can I export lap times to a spreadsheet?

There is no export button, but the lap list renders as selectable HTML text, so you can click-and-drag or triple-click to highlight an entry, then copy and paste into Excel, Google Sheets, or a plain text file. For repeated training logs, a dedicated sports app (Strava, TrainingPeaks) that generates CSV exports automatically is a better fit.

Is there a maximum elapsed time?

There is no hard cap. The counter is a double-precision float measured in milliseconds, which remains accurate for well over 100,000 years. Practically, the tab will be closed or the device rebooted long before any precision issue arises. The display format automatically expands from mm:ss to hh:mm:ss once you cross the one-hour mark.

Is any data about my timing uploaded?

No. The stopwatch runs as a Preact component in your browser tab. There is no fetch call, no WebSocket, no Beacon, no LocalStorage or IndexedDB write - the lap list lives in component memory and is gone when the page unloads. Site-wide analytics only see the page view, not your timing data.

Why does the display use monospace digits?

Monospace fonts give every digit the same horizontal space, so the number does not visually jitter as it counts - the "1" and the "8" occupy the same pixel column. With a proportional font, the minutes field would shift back and forth as centiseconds ticked, which is both ugly and harder to read. Every serious stopwatch display uses monospace for this reason.

Can I run two stopwatches at once?

Not inside one tab - the component tracks one session. For parallel stopwatches, open the tool in two browser tabs; each tab has its own isolated JavaScript context so the instances will not interfere. On mobile, tab switching is less convenient, so a dedicated multi-timer app is usually the better fit there.

How is this different from the Countdown or Pomodoro Timer?

The stopwatch counts up with no endpoint - you decide when to stop. The countdown timer counts down to a specific target and fires once. The Pomodoro Timer is a structured 25/5 interval protocol for focus sessions. Use the stopwatch for "how long did that take", the countdown for deadlines, and the Pomodoro for structured focus blocks.

More Date & Time