How this calculator works
Whole calendar years are taken first, with the birthday clamped to February 28 in a common year for a February 29 birth. The remaining interval is then counted in whole months, and whatever is left becomes days. The three parts are not independent averages: each is measured from the boundary left by the previous step, so together they reconstruct the exact interval.
Formula
years = the largest y such that the birthday in birth_year + y is not after the as-of date. months = the largest m such that addMonths(the last birthday, m) is not after the as-of date. days = O(as-of) - O(addMonths(last birthday, months)).
Worked example
Born 1990-05-20 and measured on 2026-11-01, the age is 36 years, 5 months and 12 days. The last birthday was 2026-05-20, the last monthly anniversary was 2026-10-20, and 12 days remain to the as-of date.
Advertisement
Frequently asked questions
Why is the day part not just the day of the month?
It is counted from the last monthly anniversary, which may fall on a different day of the month after clamping. The subtraction keeps the three parts consistent, whereas copying the day-of-month number can produce a breakdown that points to the wrong date.
How do you treat a February 29 birthday?
The birthday is placed on February 28 in common years, so the years and months advance there. That is the most common administrative convention, but a few legal documents specify March 1, so confirm the rule for the purpose you have in mind.
Does the time of day matter?
No. Both inputs are civil dates and the breakdown is in whole days. A birth time would add an hours component and require a time zone, which this page deliberately leaves out.
Why does the table start from today?
The monthly table shows how the breakdown evolves over the next twelve months, which is useful for a child's age or a project duration. The first row is the as-of date itself.