Calculate exact age in years, months, and days. Find date differences, countdowns, zodiac signs, and detailed time breakdowns
How many days between two dates? How old is someone born on a specific date? How long until a future event? This calculator does all three. Switch between age, date-difference, and countdown modes to break a span into years, months, days, and total weeks.
Initializing in your browser…
You need an exact age in years, months, and days from a birth date for a form, plus the total days lived.
Dates
born 1990-06-15 → on 2026-05-15
Result
35 years, 11 months, 0 days · ≈ 13,118 days · next birthday in 31 days
Calendar differencing has to respect varying month lengths and leap years, which is why "subtract the years" gives the wrong answer near a birthday. The tool computes the precise breakdown and the countdown to the next anniversary.
How many days between two dates? How old is someone born on a specific date? How long until a future event? This calculator does all three. Switch between age, date-difference, and countdown modes to break a span into years, months, days, and total weeks.
The calculator has three modes selected by buttons at the top: Age Calculator, Date Difference, and Countdown. The Age and Date Difference modes break a span into years, months, and days using a calendar-aware decomposition rather than a naive division. They subtract the calendar fields directly (getFullYear minus getFullYear, getMonth minus getMonth, getDate minus getDate), and when the day component goes negative they borrow the actual length of the previous month using new Date(year, month, 0).getDate() before decrementing the month count; if the month component is then negative they borrow twelve months and decrement the year. Because the borrow uses the real previous-month length, February's 28 or 29 days and the differing lengths of 30- and 31-day months are accounted for correctly instead of assuming a fixed 30-day month.
Alongside the years/months/days breakdown, totals are derived from the raw millisecond difference between the two Date objects (getTime() subtraction divided by 1000*60*60*24 and floored), so the Days and Weeks figures follow JavaScript's own Date arithmetic, including leap days and any daylight-saving offsets baked into the local timezone. Age mode additionally shows total months computed as years*12 + months, an Hours figure (total days x 24), the next birthday with the exact weekday rendered via toLocaleDateString in en-US, and a 'days away' countdown to it; if this year's birthday has already passed it rolls the target to next year. Date Difference mode is signed: if the start date is later than the end date it sets isNegative and prefixes the result with a minus sign, and it adds total hours and total minutes columns on top of days and weeks.
Age mode also reports two zodiac systems. The Western sign is looked up from a hard-coded table of twelve date ranges (for example Aries 3/21 to 4/19, Leo 7/23 to 8/22), with Capricorn handled as a special case because its 12/22 to 1/19 range wraps around the year end. The Chinese zodiac animal is computed as (year - 4) mod 12 against the twelve-animal cycle Rat through Pig, each shown with an emoji. The Countdown mode targets a future date and splits the remaining time into days, hours, and minutes using successive modulo operations on the millisecond gap, and displays 'This date has passed!' once the target is in the past. Every input lives in the URL via useUrlStates and the ShareConfigButton, so a particular birth date or date pair can be linked and reopened with the same result.
Calculate someone's exact age for eligibility checks, forms, or celebrations.
Determine the precise number of days, weeks, or months in a contract period.
See exactly how long remains until a deadline or special date.
Yes. February 29 and leap years are handled correctly by the underlying date math.
Years, months, and days, along with total days and total weeks for the span.
Yes. The Countdown mode shows how much time remains until a date you choose.
Every calculation runs locally in your browser. Your numbers and expressions are not transmitted or stored.