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

Countdown Timer

Set hours, minutes and seconds (or quick presets), count down live with a progress bar, and get a time-up alert.

Three minutes for noodles, five for a speech, twenty for a nap — small intervals do not justify digging through a phone's alarm settings, and a web page is enough. Set the hours, minutes and seconds, press start, and a progress bar shows how much is left at a glance; when it reaches zero the page announces that time is up.

How it is implemented matters: the timer is based on an absolute target — start time plus duration — rather than subtracting a second at a time, which drifts when a browser throttles a background tab. Even if the page stops rendering in the background, the remaining time is corrected as soon as it returns to the foreground, with no accumulated error. Just do not close the tab.

How to use

  1. Set the hours, minutes and seconds, or use a quick preset.
  2. Press start; the remaining time counts down to a hundredth of a second.
  3. Watch the progress bar to see how much is left at a glance.
  4. When it reaches zero, the page announces that time is up.

How it works

Setting the duration

Set the duration with the hour/minute/second steppers (hours 0-99, minutes and seconds 0-59), or tap the 1/3/5/10/25-minute shortcuts; a live preview of the remaining duration appears below.

Pausing after start

Press "start" to count down, and again to "pause"; after pausing, press "start" to resume from the remaining time. While running, the inputs lock to prevent accidental edits.

What happens at zero

When the remaining time hits zero it shows a "time's up" label and pops a notice; press "reset" to clear the state and set a new duration.

Code example

JavaScript A countdown that does not drift: anchor to an absolute instant

let endAt = 0, raf = 0;
function start(seconds) {
  endAt = performance.now() + seconds * 1000;
  tick();
}
function tick() {
  const remain = Math.max(0, endAt - performance.now());
  render(remain);                       // corrected every frame, no error accumulates
  if (remain > 0) raf = requestAnimationFrame(tick);
}
// rAF pauses when a background tab is throttled, and corrects to the right value on return

JavaScript The counter-example: subtracting every second drifts

// In a background tab setInterval is throttled to intervals of 1s or more,
// and the callback's own execution time adds to the error:
let left = 60;
setInterval(() => { left--; render(left); }, 1000);  // drifts

// The right approach is the example on the left: record endAt and derive the
// remaining time from now each frame; throttling changes only the frame rate

FAQ

How does this differ from the countdown calculator?

The countdown calculator tells you how long until a target moment (an exam, New Year); this sets a duration to count down (a 25-minute pomodoro), with no target date needed.

Does it ring when time's up?

It shows a "time's up" label and pops a notice. Browsers restrict pages from making sound without interaction, so keep the page foregrounded and watch for the notice.

Does resuming after pause reset the timer?

No. Pausing records the remaining time, and "start" resumes from it; only "reset" clears it.

Is the 25-minute shortcut a pomodoro?

25 minutes is the classic single pomodoro focus length; one tap starts a pomodoro, and the 5-minute shortcut works for the break.

What's the longest duration?

99 hours 59 minutes 59 seconds. Hours, minutes and seconds can't exceed 99 / 59 / 59 respectively.

Is it accurate if I switch tabs?

Yes. The remaining time is computed as "end time - current time," so switching away and back doesn't skip seconds; but browsers may freeze background refreshes, so staying foregrounded is advisable.

Can I run several timers at once?

One per page. For multiple timers, open several tabs; each counts independently without affecting the others.