Vacation countdown
From 25 July 2026 to a 15 August departure there are 21 days left, exactly 3 weeks. Type today's date and your trip's start date and get a count that never shifts with time zones. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- From
- 2026-07-25
- Vacation
- 2026-08-15
- Days
- 21
- Weeks
- 3
- Remainder days
- 0
- Year
- 2,026
A vacation countdown answers one planning question: how many whole calendar days remain between today and the morning your trip starts? This calculator takes two ISO calendar dates — a from date that stands in for the current day, and a vacation start date — and returns the remaining day count so you can schedule time off, book travel, and pack without guessing. Because the engine never reads the host clock, the same pair always yields the same integer in every timezone and in automated tests. Same-day pairs return zero remaining days, meaning the vacation starts today.
What a vacation countdown measures
People type “vacation countdown”, “days until my vacation”, and “how many days until my trip” when they already know the departure calendar day and only want the remaining whole-day count. That search is not the same as asking how many days lie until an arbitrary unnamed date, not the same as a signed interval in either direction, and not the same as a days-hours-minutes-seconds timer between two timestamps.
This page treats the trip start as a future horizon: remaining days equal the serial Gregorian day number of the vacation start minus the serial day number of the reference day you treat as today. If the subtraction is negative, the vacation has already started relative to the reference and the capability refuses the pair. If the subtraction is zero, the vacation starts today and the remaining count is zero.
Times of day, time zones, airport cutoffs, and business-day calendars are out of scope: a midnight-to-midnight civil day is the unit.
How the two ISO dates are read and what comes back
The required fields are from, the current calendar day in YYYY-MM-DD form, and vacation, the vacation start day in the same form. Each value must be a real Gregorian day: four-digit year, two-digit month, two-digit day, with February twenty-nine allowed only in a leap year. Years are limited to the inclusive range one through nine thousand nine hundred ninety-nine so four-digit ISO strings stay well defined.
A vacation start earlier than from fails with a message that the vacation date is in the past. Classic checks include twenty twenty-six dash zero seven dash twenty-five until a mid-August departure twenty twenty-six dash zero eight dash fifteen yielding twenty-one remaining days, and twenty twenty-four dash zero two dash twenty-eight until twenty twenty-four dash zero three dash zero one yielding two days across a leap day.
Where a vacation countdown shows up in real planning
Households use a vacation countdown when a kitchen whiteboard, a family group chat, or a printed packing list needs a single remaining-day number that will not flip when a traveler’s phone is west of the departure city. Human-resources teams and team leads pin paid-time-off start dates against a fixed as-of day so a request written on Friday still shows the same integer on Monday morning in continuous integration.
Travel writers and hotel landing pages seed “days until you leave” widgets without reading the server clock, which would make snapshots and screenshots disagree. Teachers assign leap-year February and year-crossing pairs so students can check a trip that spans the twenty-ninth of February without a spreadsheet that silently uses local midnight.
Pair this landing with a generic days-until tool when the event is not a vacation, with a days-between tool when you need a signed interval in either direction, with a countdown-between tool when you also need leftover hours and minutes, or with a vacation-fund-per-paycheck tool when the question is money rather than days. Keep this page for the search “vacation countdown” and “how many days until my trip”.
What you can do with it
Family packing and departure boards
Turn today and the vacation start day into a single remaining-day count for whiteboards, group chats, and packing lists without timezone drift.
Paid-time-off and leave requests
Pin a deterministic days-until-leave integer against a fixed as-of date so PTO tickets and HR checks do not depend on the host clock.
FAQ
How is a vacation countdown calculated?
days = serial(vacation) − serial(from) on the Gregorian calendar. Send two ISO dates YYYY-MM-DD. The same day returns 0. A vacation start earlier than from is rejected as in the past.
Does a leap day change the remaining count?
Yes. February 29 is counted when it falls strictly between from and vacation. From 2024-02-28 until 2024-03-01 is two days; the same pair in 2023 is invalid if you write 2023-02-29.
What does the vacation countdown cost?
It is free in your browser on this page.
What if my vacation date has already passed?
The calculator refuses the pair instead of showing a negative number, because a countdown to a trip that already began is not a countdown. If both dates are the same, it returns zero: your vacation starts today.
Why do I type today's date myself?
The calculator never reads a device clock, so you enter the day that counts as today. That way the same two dates always give the same number of days, whatever time zone you are in.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/life/vacation-countdown \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"2026-07-25","vacation":"2026-08-15"}'const res = await fetch("https://api.kit.forhosting.com/life/vacation-countdown", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"from": "2026-07-25",
"vacation": "2026-08-15"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/vacation-countdown",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"from": "2026-07-25",
"vacation": "2026-08-15"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/vacation-countdown", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"from":"2026-07-25","vacation":"2026-08-15"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"from":"2026-07-25","vacation":"2026-08-15"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/vacation-countdown", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"from": "2026-07-25",
"vacation": "2026-08-15"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.vacation_countdown",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
year_min | 1 |
year_max | 9999 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
If the vacation start sits before the reference day, the request fails with invalid_input instead of a negative number: a countdown to a trip that already began is not a countdown. Successful API calls cost $0.002; failed validation is not charged.
What a vacation countdown measures
The serial conversion follows Howard Hinnant’s days_from_civil identity, which maps a civil year-month-day triple onto an integer day count with a well-known Unix-epoch convention, so leap days and century rules stay consistent across years. Because the implementation never constructs a JavaScript Date, the same pair always yields the same integer whether it runs in a Worker, a browser in Tokyo, or a test harness with TZ set to America/New_York.
How the two ISO dates are read and what comes back
Aliases today, current, as_of, and on are accepted for the reference; aliases start, vacation_start, date, and until are accepted for the trip start, so a form, a query string, or a spreadsheet column can reuse the contract. Missing fields, empty strings, non-string types, malformed patterns, impossible months, and non-leap twenty-ninth of February fail with invalid_input that names the field. On success the body echoes the canonical from and vacation strings, the remaining days, whole weeks and leftover remainder_days, year, month, and day of the trip start, from_year, from_month, and from_day of the reference, a same_day boolean, a formula string, and a short message. Successful API requests cost $0.002; invalid input is not billed.
Where a vacation countdown shows up in real planning
Because this capability is a pure parse engine, the work runs entirely in your browser on this page, and through the API each successful lookup costs $0.002 while failed validation does not consume balance. Nothing is stored after the response returns.
Integration use cases
Travel landing pages and CI fixtures
Seed “days until you leave” widgets and regression tests with a reproducible countdown that fails loudly when someone types last year’s trip date.
Technical questions
Why must I send a from date instead of using today automatically?
The calculator never reads the host clock, so results stay identical in every timezone and in golden tests. Use from as the stand-in for today.
What happens if the vacation date is in the past?
The request fails with invalid_input and is not charged. This landing is a countdown to a future trip start, not a signed interval in both directions.