Skip to content

Countdown Timer — Days to Date, New Year & Christmas Countdown

Last verified May 2026 — runs in your browser
Countdown to your event
Friday, May 15, 2026 at 12:00 PM
00
Days
19
Hours
05
Minutes
08
Seconds
19
Total Hours
1145
Total Minutes
68.708
Total Seconds
0 w 0 d
Total Weeks

Countdown to Date — Days/Hours/Minutes Until Birthday, Holiday or Deadline

Pick a target date and time and the page renders a live countdown — days, hours, minutes, seconds — that ticks down every second. Useful for tracking days until a birthday, holiday, project deadline, contract end, sports event, child's birth, retirement date, or any milestone you want a constant reminder of. The countdown also surfaces the total breakdown (e.g. "137 days = 3,288 hours = 197,280 minutes") which is useful for project planning, comparing leadtimes, or thinking about a deadline in different time scales.

About this tool

Each tick recomputes `target - Date.now()` rather than incrementing a counter via `setInterval`, which means the countdown stays accurate even when the browser throttles inactive tabs (Chrome/Firefox slow background-tab timers to 1 Hz or less to save battery, which would cause a `setInterval(fn, 1000)`-based counter to drift). The trade-off is that wall-clock changes (NTP correction, daylight-saving transition, manual clock edits) immediately shift the visible countdown — for most use cases that's the correct behavior. The target is treated as a wall-clock time in your browser's local timezone; the page handles past-target dates gracefully by showing "Event has passed" instead of negative numbers. Accepts any HTML5 datetime-local input format. Common use cases: New Year's Eve countdown on a TV in the corner of a room, holiday reminders, deadline pressure for a project, anniversary tracking, exam preparation pacing, conference travel countdown, retirement/sabbatical countdown, baby due-date tracking, sports tournament dates.

  • Live countdown that ticks every second to your chosen wall-clock target
  • Days, hours, minutes, seconds — plus total breakdowns
  • Date.now() recompute on every tick — survives browser tab throttling
  • Handles past-target gracefully ("Event has passed")
  • Treats target as local wall-clock time (handles DST transitions)
  • Works as a kiosk/TV-corner countdown when left on a single tab
  • No upload — no record of what you're counting down to
  • Pause-on-hidden tab via standard browser energy-saving (resumes on focus)
  • HTML5 datetime-local input — works on touch devices too
  • Useful for birthdays, holidays, deadlines, exams, weddings, conferences

Free. No signup. Your inputs stay in your browser. Ads via Google AdSense (consent required).

Frequently asked questions

How does Date.now()-based countdown survive browser tab throttling?

Chromium tab throttling (Chrome 87 stable, 17 November 2020) caps background `setInterval` and `setTimeout` callbacks to a 1 Hz minimum to save battery on laptops and mobile; Chrome 88 (January 2021) intensive throttling further reduces wake-ups to once per minute for tabs hidden > 5 minutes. A countdown that increments a counter via `setInterval(fn, 1000)` will drift behind real time when its tab is backgrounded — the counter says "5 hours left" when wall-clock says 4 hours left. The recompute pattern — `target − Date.now()` on every tick — bypasses the drift entirely: each visible tick reads the current time fresh, so the displayed countdown reflects actual remaining time regardless of how often the tick runs. Trade-off: when the tab is backgrounded, the countdown freezes visually until refocus, then jumps to the correct value. Combined with the W3C Page Visibility API (Recommendation 2013), the page can re-render immediately on the visibilitychange event when the tab returns to foreground.

What is the Y2038 problem and when does it matter?

The Y2038 problem is the Unix timestamp wraparound: POSIX time_t (per IEEE Std 1003.1) is traditionally a signed 32-bit integer counting seconds since the Unix epoch 1970-01-01T00:00:00Z. The maximum signed 32-bit integer 2³¹ − 1 = 2,147,483,647 corresponds to 03:14:07 UTC on Tuesday 19 January 2038 — past that moment, the counter overflows to negative values, breaking date arithmetic and making any countdown to a date past 2038 silently wrong. Modern systems have moved to 64-bit time_t: Linux kernel 5.6 (March 2020), macOS 10.7 Lion (2011), Windows NT internally for decades. Embedded systems (industrial control, cars, household appliances), legacy databases, and 32-bit binaries on 64-bit operating systems remain vulnerable. JavaScript's Date object uses IEEE-754 double-precision ms-since-epoch (range ±100,000,000 days from 1970), so browser countdowns are unaffected through the year 275760 — but if the countdown target is processed by a server, file format, or device with 32-bit time_t, the wraparound becomes visible.

How do daylight-saving transitions affect a countdown?

A countdown using local wall-clock time can show ±1 hour visible discontinuity at a DST boundary. EU spring-forward (last Sunday of March, +1 hour: clocks jump 02:00 → 03:00 in CET, equivalently 01:00 UTC per Directive 2000/84/EC) makes a countdown that targets a date past the boundary lose 1 hour at that moment — the visible "5 hours 30 minutes" becomes "4 hours 30 minutes". EU fall-back (last Sunday of October, −1 hour: clocks repeat 03:00 → 02:00 in CET) does the inverse — the countdown gains 1 hour. US DST runs on different Sundays (second Sunday of March, first Sunday of November) per the Energy Policy Act 2005. A countdown using UTC sidesteps this entirely (UTC has no DST) but loses local human framing — "3 hours until midnight" reads naturally only in local time. The page treats the target as wall-clock local time, so DST-boundary discontinuities are visible by design.

How accurate is a browser-tab countdown vs server time?

Browser clocks rely on the operating system clock, which is synchronised to internet time via NTP (Network Time Protocol, RFC 5905, typical drift on the order of a few tens of milliseconds when network-connected). The countdown's accuracy is therefore bounded by the OS clock accuracy plus the JavaScript event-loop tick granularity (usually 4-16 ms via requestAnimationFrame, or 1000 ms throttled in background tabs per the Chromium policy above). For practical countdowns (deadlines, holidays, events), this is more than accurate enough — a few milliseconds of drift per minute is invisible. For sub-second precision (e.g., New Year's Eve countdown to a specific server clock), the page would need to fetch server time periodically and adjust — which most countdown UIs don't bother with because OS NTP keeps clocks within a few hundred milliseconds of real time globally.

What's the Page Visibility API and how does it relate?

The W3C Page Visibility API (Recommendation 29 October 2013) exposes whether a tab is currently visible to the user via `document.hidden` (boolean) and the `visibilitychange` event. It's the standard mechanism browsers use to inform pages about tab focus state, separate from the older `window.focus`/`blur` events (which fire only for tab+window focus, not tab-switch within a window). Combined with the Date.now() recompute pattern, a countdown can: (a) skip animation frames while hidden to save CPU, (b) jump directly to the correct value when the tab returns to foreground (via the visibilitychange event firing with `document.hidden = false`). Modern browsers throttle setInterval to 1 Hz minimum in hidden tabs (Chromium tab throttling, Chrome 87 stable 17 November 2020) regardless, so the Page Visibility API mainly helps with re-sync on refocus rather than reducing throttling.

Sources (7)
  • International Organization for Standardization (2019). ISO 8601-1:2019 — Date and time format YYYY-MM-DDTHH:MM:SS underlying the HTML datetime-local input value, the Date.now() millisecond timestamp display, and any human-readable countdown target rendering; locale-unambiguous + lex-sortable. ISO Technical Committee 154 (TC 154); supersedes ISO 8601:2004.
  • WHATWG (Web Hypertext Application Technology Working Group) (2024). HTML Living Standard — input element type=datetime-local; YYYY-MM-DDTHH:MM:SS format (ISO 8601 profile without time zone offset); browser-native date+time picker on mobile and desktop; widely supported across Chromium / Firefox / WebKit since 2017. WHATWG HTML Living Standard (continuously updated; this section stable since HTML5 2014); accessible at html.spec.whatwg.org.
  • Mills, D., Martin, J., Burbank, J., & Kasch, W. (2010). RFC 5905 — Network Time Protocol Version 4 (NTPv4): Protocol and Algorithms Specification. Defines the algorithm OS clocks use to synchronise to internet time servers; typical drift bounded to a few tens of milliseconds when network-connected, which sets the floor on browser countdown accuracy via the OS clock. Internet Engineering Task Force (IETF) Proposed Standard, June 2010; supersedes RFC 1305 NTPv3.
  • Ecma International (2024). ECMA-262, 15th edition (June 2024) — ECMAScript Language Specification §21.4 Date Objects; Date.now() returns ms since Unix epoch 1970-01-01 UTC as IEEE-754 double; the recompute pattern target − Date.now() per tick stays accurate even when setInterval timers are throttled by browser background-tab energy-saving. Ecma International TC39; current standard ECMA-262 published annually since ES5 (2011).
  • IEEE / The Open Group (2018). POSIX.1-2017 (IEEE Std 1003.1-2017) — defines time_t as seconds since the Unix epoch 1970-01-01T00:00:00Z UTC. The Y2038 problem: signed 32-bit time_t wraps at 03:14:07 UTC on Tuesday 19 January 2038 (when seconds-since-epoch exceeds 2³¹ − 1 = 2,147,483,647). Linux 64-bit time_t since kernel 5.6 (March 2020) avoids this; macOS 64-bit since 10.7 Lion (2011); embedded + legacy 32-bit systems remain vulnerable. Institute of Electrical and Electronics Engineers / The Open Group joint standard (current revision IEEE Std 1003.1-2024).
  • World Wide Web Consortium (W3C) / Chromium Project (2013). Page Visibility API (Second Edition) — visibilitychange event fires when a tab moves to background or returns to foreground; document.hidden boolean indicates current state. Combined with Date.now() recompute on each tick, a countdown re-syncs immediately on tab refocus. Chromium tab throttling (Chrome 87 stable, 17 November 2020) caps background setInterval frequency to 1 Hz; Chrome 88 (January 2021) intensive throttling further reduces wake-ups to once per minute for tabs hidden > 5 minutes. W3C Page Visibility API Recommendation (Second Edition) 29 October 2013; Chromium tab throttling documented at blog.chromium.org/2020/11/tab-throttling-and-more-performance.html and intensive throttling at developer.chrome.com/blog/timer-throttling-in-chrome-88.
  • World Wide Web Consortium (W3C) (2018). Web Content Accessibility Guidelines (WCAG) 2.1 — Success Criterion 4.1.3 Status Messages. W3C Recommendation 5 June 2018; carried unchanged into WCAG 2.2 (Recommendation 5 October 2023).

These are the original publications the formulas in this tool are based on. Locate them by journal name and year on Google Scholar or PubMed.