Countdown

Countdown Timer

Set a target date and timezone, and the panel ticks down once per second — years, months, days, hours, minutes, seconds remaining. Counts up from past dates too.

What this countdown timer does

Set a future date and time, optionally in a non-local timezone, and the panel below ticks down once per second showing how long is left in years, months, days, hours, minutes, and seconds. The same panel handles 'time since' — if the target is in the past, the same breakdown counts up since the event. The Unix timestamp of the target is also shown, so you can paste it into a calendar invite, a cron schedule, or a database row.

Days until Christmas, New Year, and other recurring events

The preset chips above the date picker handle the searches people most often want a countdown for. 'Next Christmas' jumps the date to December 25 at midnight in your current timezone (next year if this year's already past), 'Next New Year' jumps to January 1, and 'Y2038 overflow' counts down to the moment a 32-bit signed Unix timestamp wraps. Each preset is just a date stamp — you can edit it after applying to nudge the time or change the zone.

  • Days until Christmas: click 'Next Christmas', timezone defaults to your local time
  • Days until 2027: click 'Next New Year' on or after January 2 2026 and you'll get the New Year 2027 countdown
  • Days until a release: type the launch date, set the time to 09:00 PT or your release window
  • Days until a deadline: type the deadline; the breakdown row reads as a sentence for status posts

Countdown to 2027 (or any specific year)

Want a countdown to a particular year? Type the date 2027-01-01 in the date input and leave the time at 00:00:00 in your timezone — the panel will read 'X days, Y hours' until the moment the year starts where you are. If you need to count down to the same moment for everyone (e.g. a coordinated launch), set the timezone to UTC instead of leaving it at your local zone. The Unix timestamp shown below the breakdown is the same in every timezone, which is the property that makes it portable.

Picking the right timezone

The same wall-clock date and time mean different instants in different timezones. For a countdown to a holiday observed locally — birthdays, anniversaries, New Year's Eve — leave the picker at your browser's detected timezone. For a countdown to a globally announced moment — a satellite launch, a leap-second insertion, a contract deadline — set the timezone to whatever timezone the announcement uses (often UTC). DST transitions on either side are handled automatically; the underlying epoch never shifts.

Counting up from past events

If the target is already in the past, the same panel becomes a 'time since' counter. This is handy for displaying 'X days, Y hours since the project started' or 'time since we last had a production incident'. The numbers are positive and the direction badge flips to 'Target is in the past', so you can copy the breakdown for status pages or release notes without rewriting it.

  • Time since the Unix epoch began: set the target to 1970-01-01 00:00:00 UTC
  • Time since a software release: set the target to the release timestamp in UTC
  • Time since a personal milestone: set the target to that day's midnight in your zone

Y2038 — a real countdown that matters for software

The 'Y2038 overflow' preset counts down to 2038-01-19 03:14:07 UTC, the instant when a signed 32-bit Unix timestamp overflows. Anything still using a 32-bit time_t at that point will wrap to a negative number representing 1901. Modern operating systems and language runtimes have moved to 64-bit timestamps; embedded firmware and old databases are where the surprises live. If you're auditing a fleet, the running countdown is a useful headline number for the report.

Embedding a countdown in your own code

The math is identical regardless of language: subtract the current epoch from the target epoch, then break down the remainder into Y/M/D/h/m/s. The tool computes the target as a Unix timestamp once and the live tick simply reads Date.now() on every interval. Recreate it in your stack with the snippets below — the calendar breakdown bit is the only tricky piece (months and years have variable lengths).

  • JavaScript: const left = target - Date.now(); const days = Math.floor(left / 86_400_000);
  • Python: delta = target - datetime.now(timezone.utc); delta.days, delta.seconds
  • Go: time.Until(target).Hours() / 24
  • For the calendar breakdown, prefer a library (luxon, date-fns, dateutil, java.time) over hand-rolled month math