Date & Time Runs locally Ready to use Built-in examples No tracking

Online Stopwatch

Start, pause and resume with centisecond precision; record laps and see the fastest and slowest flagged automatically.

Stopwatches are wanted for sports testing, timing an experiment or boiling an egg, and the requirement is always the same: start cleanly, read accurately. This one runs off the system's high-resolution clock and reads to a hundredth of a second, with lap timing, fastest and slowest markers, pause and resume, and a reset that zeroes everything. The one thing it cannot correct for is the human reaction time on the button.

On precision: the timing is based on the browser's high-resolution clock (performance.now, sub-millisecond) and displayed to a hundredth of a second, but pressing a button by hand carries a 100–200 ms reaction delay. Where accuracy matters — sports testing, laboratory records — trigger automatically and treat hand-timed results as a reference. Lap times record each interval, and the fastest and slowest are marked for comparison.

0:00.00

How to use

  1. Press start to begin; the reading runs to a hundredth of a second.
  2. Press lap to record an interval without stopping the clock.
  3. Pause and resume as needed; the fastest and slowest laps are marked.
  4. Reset to zero, and allow for human reaction time when comparing results.

How it works

Starting and pausing

Press "start" to run the watch, and again to "pause"; after pausing, "start" resumes from the pause point rather than resetting.

Using lap timing

Press "lap" while running to record the current cumulative time; in the list, "lap" is how long that lap took and "total" is the time since start.

The fastest/slowest marks

With 2 or more laps, the shortest lap is auto-marked "fastest" and the longest "slowest"; press "reset" to clear the timing and all laps.

Code example

JavaScript A high-precision stopwatch: accumulate deltas

let running = false, base = 0, acc = 0;
const now = () => performance.now();

function start() { base = now(); running = true; }
function pause() { if (running) { acc += now() - base; running = false; } }
function elapsed() { return acc + (running ? now() - base : 0); }

// Pause/resume only accumulates the delta; nothing relies on setInterval addition, so there is no throttling drift
// Laps: take an elapsed() snapshot per lap and subtract adjacent snapshots

Python Timing with perf_counter

from time import perf_counter

t0 = perf_counter()
# ... code under test ...
elapsed = perf_counter() - t0   # seconds (float, sub-millisecond precision)

# Always time with perf_counter (a monotonic clock),
# not time.time() — that one is shifted by system clock adjustments

FAQ

What's the precision?

The display is to 0.01 seconds (hundredths), accumulated internally in milliseconds; the page refreshes every 50 ms.

Does resuming after pause reset the timer?

No. Pausing just halts; "start" resumes from the pause point. Only "reset" zeroes it and clears the laps.

What's the difference between "lap" and "total"?

"Total" is the time from start to the moment of lapping; "lap" is this lap's time, equal to the current total minus the previous total. The first lap's lap and total are the same.

How are fastest/slowest marked?

With at least 2 laps, the row with the shortest lap time is marked "fastest" and the longest "slowest"; ties take the earlier one.

Does it stop if I switch tabs?

No. Timing is based on system-clock differences, so switching away and back still counts correctly without missing time.

How does it differ from a countdown timer?

A stopwatch counts up from 0 with no known end; a countdown timer counts down from a set duration to 0 and alerts.

Is the timing lost if I close the page?

Yes. Stopwatch state lives only on the current page and zeroes on refresh or close; for long timing, use the countdown timer and keep the page open.