Three different answers to "how old"
Completed years is the number a form wants: how many birthdays have gone by. Years, months and days is the calendar breakdown, and it is the one that behaves oddly, because a month has no fixed length. From January 31 to March 1 is one month and one day, and from January 31 to February 28 is 28 days that do not quite make a month. The breakdown here counts whole calendar months forward from the last birthday and then counts leftover days, which is the ordinary reading, but it means the day figure is measured against months of different sizes.
Days lived is the only one of the three that is a straight count with no ambiguity in it, and it is the figure the milestone table is built on. The birth date is day zero, so somebody born yesterday has lived one day. Dividing days by 365.2425 gives a decimal age — that constant is the mean length of a Gregorian calendar year, accounting for the leap year rule and its century exceptions — and it will disagree slightly with the completed-years figure, which is correct rather than a bug.
What counts as a milestone here
Decade birthdays, round day counts, round week counts, and two markers that come from other units of time entirely. A billion seconds is 11,574 days, so it lands about four months after the thirty-first birthday. Half a million hours is 20,833 days, a little past fifty-seven. Ten thousand days arrives at roughly twenty-seven years and four months, which is why it is the day count people notice.
What is deliberately absent is any age with legal consequences. Voting age, driving age, drinking age, the age at which a retirement account can be drawn on, state pension age, age of majority — every one of these varies by jurisdiction, several vary within a country, and they get amended. A page that printed one of them as though it were universal would be wrong for most readers most of the time. The dates here are arithmetic and nothing else.
February 29, and why it needs a decision
A leap-day birth has an anniversary that exists in one year out of four. Three years in four, something has to be chosen. This page uses March 1 in common years, on the reasoning that the anniversary falls the day after February ends. February 28 is the other widespread convention, and various legal systems use one or the other for different purposes.
The choice moves every birthday-derived figure by exactly one day in non-leap years: the age ticks over on March 1 rather than February 28, so somebody with that birth date is briefly a year younger under this page's reading than under the other. Day counts, week counts and the billion-second marker are untouched, because they are counted forward from the birth date itself and never consult a calendar month. If the exact day matters for something official, the convention that governs is whichever one the relevant authority uses, not this one.
How the dates are handled underneath
Both dates are built with local-time constructors, never parsed as UTC. That matters because new Date('1995-05-15') is interpreted as midnight UTC and will render as May 14 for anybody west of Greenwich — an off-by-one that has quietly corrupted a great many date calculators. Dates entered here are split into year, month and day and passed to the local constructor, then checked by reading the three fields back. If they do not match what went in, the date is rejected: February 30 rolls forward to March 2, the round trip fails, and nothing is calculated rather than something wrong being calculated.
Day counts are then taken as differences of UTC day numbers rather than as milliseconds divided by 86,400,000. A day on which the clocks change is 23 or 25 hours long, and dividing raw milliseconds by a fixed day length across such a boundary can round the wrong way. Using day numbers makes the count exactly the number of calendar days between the two dates, whatever the clocks did in between.
Questions people ask
Why does the decimal age not match the years, months and days?
Because they measure different things. The decimal figure is total days divided by 365.2425, the mean length of a calendar year. The calendar breakdown counts actual birthdays and actual months, which vary between 28 and 31 days. Somebody exactly six months past a birthday is at 0.5 by the calendar reading but somewhere between 0.496 and 0.504 in decimal, depending on which six months. The completed-years number is the one to put on a form; the decimal one is for arithmetic.
Does the day count include the birth date itself?
No — the birth date is day zero, so the count is the number of full days that have elapsed. Somebody born yesterday has lived one day. That is the convention the milestone dates use as well: the ten-thousand-day marker is ten thousand days after the birth date, not the ten-thousandth day of life. If you want the inclusive count, add one.
Why are there no legal age milestones?
Because there is no legal age that is true everywhere, and printing one as though there were would mislead more readers than it helped. Driving ages, voting ages, drinking ages, ages of majority and retirement ages differ between countries, differ between states or provinces within countries, differ by category within a jurisdiction, and get amended. The dates on this page are pure arithmetic on your two inputs, which is a claim that holds regardless of where you are.
Can I use it to work out an age on a past or future date?
Yes, that is what the "measure as of" field is for. Set it to any date and everything recalculates against it: the age, the day counts, the next birthday, and which milestones are behind and which are ahead. Setting it to a date before the birth date is rejected rather than reported as a negative age, since a negative age is almost always a sign the two fields were filled the wrong way round.