Stopwatch
Ready
Hours, minutes, seconds and hundredths
A precise, distraction-free stopwatch for everyday timing.
When to reach for a stopwatch
Use a stopwatch when the question is how long something takes rather than how long is left: a rehearsal run, a build step, a lap, a support call. Start, pause and resume as often as you need — paused time is simply not counted.
Accuracy
Elapsed time is measured against a monotonic browser clock, so it is unaffected by the system clock being corrected while the stopwatch runs. The display shows hundredths of a second; treat it as accurate to a few hundredths rather than to the millisecond, since browser timers are deliberately coarse.
What the readout is made of
The timers on WRLD CLOCK share one rule, stated in the engine's own header: every timer stores an anchor and derives its display from the current reading minus that anchor on each frame. Nothing accumulates per-tick deltas, so a timer left running for an hour is exactly as accurate as one that has just started, no matter how irregular the tick interval is. The stopwatch is a small implementation of that rule in the count-up direction, but it is not built on the engine. It reads the monotonic browser clock the Accuracy section describes; the engine's timers store wall-clock epochs, which is what lets a reload resume them. What the stopwatch keeps is the same pair the engine's count-up state keeps — running with an anchor, paused with a total: the reading of the clock when you last pressed Start or Resume, and the total that had already been counted before that press. Every redraw of the readout is the same subtraction, current reading minus anchor, added to the total already banked. There is no running counter being nudged forward by a timer tick, which is why the gaps between redraws — smooth, uneven or long — never leak into the figure, and a correction to the system clock mid-run does not move the readout either. The worked examples below call the engine's count-up functions, because they state that arithmetic exactly and can be run at a fixed instant when the site is built.
A worked run at a fixed instant
Every figure in this section comes from calling the engine's count-up functions at a fixed example instant when the site was built — 09:00:00 UTC on 14 January 2026 — not from the clock as you read this. Press Start at 09:00:00: the engine records that instant as the anchor and nothing else. Read the stopwatch at 09:04:20 and the engine returns the difference, which the clock formatter writes as 00:04:20 and the plain-language formatter as 4 minutes 20 seconds. Read it again at 10:00:00, with no interaction in between, and the same subtraction gives 01:00:00 — 1 hour — however many times the page redrew itself in that hour, in view or hidden and refreshing less often. The anchor has not changed, so the answer cannot have drifted; the only thing that has changed is the reading of the clock. If a reading ever came back earlier than the anchor, the engine clamps the result at zero rather than showing a negative stopwatch: asked for the elapsed time 5 seconds before the example start, it reports 0 seconds.
Pause and resume are arithmetic on the anchor
Pausing does not stop a counter, because there is no counter to stop. Press Pause at 09:07:00 and the engine replaces the anchor with a total: the difference between that instant and the anchor, 00:07:00 in this example, stored as a plain number of milliseconds. From then on the stopwatch reads that stored total and nothing else. Leave it paused until 10:00:00 — 53 minutes later — and it still reads 00:07:00, because a paused state has no anchor to subtract from. Press Resume at 10:00:00 and the engine does the reverse: it sets a new anchor 7 minutes before the instant you pressed, so the next subtraction already includes the time counted earlier. Read the stopwatch at 10:10:00 and it shows 00:17:00: the 00:07:00 counted before the pause plus the 10 minutes since Resume, 17 minutes in all. Meanwhile the wall clock has moved 1 hour 10 minutes since Start. That difference is not an error; it is the 53 minutes the stopwatch was paused for, which, as the first section says, is simply not counted.
What the engine's stored total keeps
The engine's pause arithmetic keeps every millisecond. Pause the same run 123 milliseconds after 09:07:00 and the stored total is 420,123 milliseconds; the odd 123are kept, not rounded away, and Resume moves the anchor back by exactly that amount. What you see depends on which formatter is reading that number. The engine's clock formatter rounds seconds up and writes 00:07:01; the plain-language formatter used in body copy rounds to the nearest second and writes 7 minutes. The stored number is finer than both. Those figures describe the engine's functions, run at a fixed instant when the site was built. The stopwatch readout on this page adds a field of completed hundredths after the seconds; that field is the page's own rather than one of the engine's formatters, so it is described here, not computed. The stopwatch on this page banks the figure from its most recent redraw when you press Pause, so the Accuracy section stands: the readout shows hundredths, and you should treat them as accurate to a few hundredths rather than to the millisecond, and as approximate at a pause, because browser timers are deliberately coarse.
How to read the display
The readout runs hours, minutes and seconds, then a dot and the hundredths — the order the line under the clock names them: hours, minutes, seconds and hundredths. The hours field is always present, so the readout keeps the same width from the first hundredth onward and the digits do not shift sideways as the time grows: a stopwatch that has run 4 minutes 20 seconds reads 00:04:20 with its hundredths after the dot. The label above the figure is the state: Ready before the first press, Running while an anchor is set, Paused while a stored total is being shown. The main button reads Start at Ready, Pause while running and Resume while paused; Reset clears both the anchor and the stored total and returns the label to Ready. The hundredths are completed hundredths — the readout shows what has fully elapsed, never a rounded-up figure. That is the opposite convention from the countdown timers, whose formatter rounds seconds up so a fresh timer reads its full length: at 999 milliseconds the countdown formatter writes 00:01, while the stopwatch readout, which shows only completed hundredths, has not yet turned over its first second. Both are right for their direction. A countdown should not read a second short before it has started, and a stopwatch should not claim a second it has not finished.
Where the stopwatch stops
The stopwatch keeps two things — an anchor and a total — in the open page, and nothing anywhere else; its limits follow from that. The engine's storage envelopes are the ones that let the other timers resume after a reload. They are keyed for 4 timers — pomodoro, speech, interval and countdown — and the stopwatch is not among them. So a reload, a closed tab or a move to another page starts the stopwatch again from zero with the label at Ready. Keep the tab open for as long as the measurement matters. The query-string presets that configure the other timers from a shared link have no stopwatch form either, because there is nothing to configure: no length, no phases, no target. For the same reason there is no end cue — a stopwatch has no end — and no counter in the tab title; the readout is on the page only. There is no lap function, as the questions below say. One behaviour is described here rather than simulated: in a hidden tab the elapsed time stays correct, because it is measured against a clock rather than counted, but the display refreshes less often while the tab is hidden. The figures on this page come from the engine at build time; what a hidden tab does comes from the browser.
Common misreadings
Reading the hundredths as milliseconds: the last two digits are hundredths of a second, a change of one in that field is 10 milliseconds, and the readout is accurate to a few of them, not to one. Reading the stopwatch against the wall clock: after any pause the two disagree by exactly the paused time, as the worked example shows — 1 hour 10 minutes on the wall, 00:17:00 on the stopwatch, 53 minutespaused — and the stopwatch is right about what it measures. Expecting a countdown's rounding: a stopwatch that has not completed its first second still shows its seconds at zero, while the countdown tool at the same instant — 999 milliseconds — would show 00:00:01, because it always shows hours and rounds the second up. Expecting the figure to survive a reload: it does not, for the reason above. Expecting a jump in the display to mean lost time: when a redraw comes late, as it does in a hidden tab, the readout jumps forward to the figure it should show, because each redraw is a fresh subtraction from the anchor. The jump is the display catching up, not time being lost or added.
The same rule in the other direction
A countdown on this site stores the instant it should reach zero and subtracts the current reading from that; the stopwatch stores the instant it started and subtracts that from the current reading. Same anchor, opposite sign. That is why the two tools pause and resume the same way — a countdown pauses to a remaining balance where the stopwatch pauses to a stored total — and why neither can drift. The guide How the timers stay accurate walks through the countdown side with the same kind of fixed instants, including what the reload envelopes save and why the display rounds seconds up.
Questions
- Does the stopwatch keep counting in a background tab?
- The elapsed time stays correct, because it is measured against a clock rather than counted, but the display refreshes less often while the tab is hidden.
- Is there a lap function?
- Not yet. For structured repeats, the interval timer counts rounds of work and rest for you.
- What happens if I reload the page while the stopwatch is running?
- It starts again from zero. The storage envelopes that let the pomodoro, speech, interval and countdown timers resume after a reload are not kept for the stopwatch, so the anchor and the stored total live only in the open page. Keep the tab open for as long as the measurement matters.
- Does pausing lose any time?
- Not in the arithmetic. The engine's pause arithmetic keeps the whole total — 420,123 milliseconds in the worked example above, including the odd 123 — and Resume moves the anchor back by exactly that amount. The stopwatch on this page banks the figure from its most recent redraw when you press Pause, so treat the hundredths as approximate at a pause, as the Accuracy section says.
- Why does the stopwatch disagree with the wall clock?
- Because paused time is not counted. In the worked example the wall clock moves 1 hour 10 minutes between Start and the final reading, the stopwatch shows 00:17:00, and the difference is the 53 minutes it spent paused. The stopwatch measures the time it was running, not the time of day.
- Why hundredths of a second rather than milliseconds?
- Because the display should not claim more than the reading behind it can support. The stopwatch is accurate to a few hundredths rather than to the millisecond, since browser timers are deliberately coarse, so the readout shows hundredths and stops there.
- Can I share a stopwatch by link?
- There is no preset link for the stopwatch, because there is nothing to configure. The links that configure the other timers carry lengths, phases and targets; a stopwatch has none. Share the page address itself and it opens at Ready.
- Does the tab title show the stopwatch?
- No. The readout is on the page only; the stopwatch does not write its figure into the tab title, so a hidden tab shows the page name rather than the elapsed time.