Ask someone their age and they'll give you a single number, but that number is really an approximation that's only correct for part of the year. Someone born on March 20, 2000 turns a year older on March 20 each year, not on January 1, so for the roughly ten weeks between January 1 and March 20, subtracting birth year from the current year overstates their age by one. Getting an exact age, correct to the day, requires comparing full dates rather than just years.
Why simple subtraction fails
The naive approach, current year minus birth year, only works if today's month and day are on or after the birth month and day. If they're not, meaning the birthday hasn't happened yet this year, the naive subtraction is off by exactly one year. This is the single most common bug in hand-built age calculations: someone born in November calculated in February looks a year older than they actually are until the code accounts for whether the birthday has passed.
A correct calculation compares year, month and day as a set. It subtracts the birth year from the current year first, then checks whether the current month/day combination is earlier than the birth month/day; if so, it subtracts one more year and "borrows" the difference in months and days instead, similar to how you'd borrow across columns in manual subtraction.
Why months and days need borrowing too
The same borrowing problem happens one level down. If today's day-of-month is smaller than the birth day-of-month (say you were born on the 28th and today is the 5th), you can't just subtract days directly, you borrow a month, add the number of days in the previous calendar month to today's day count, and then subtract. Since months have different lengths (28 to 31 days), this borrowed value isn't a fixed constant, it depends on which specific month you're borrowing from, which is exactly the kind of edge case that makes age math error-prone to do by hand.
Because of this month-length variability, the same birth date can produce a slightly different "months and days" breakdown depending on which two months you're spanning. Running the exact numbers through the Age Calculator avoids working this out manually, and it's also useful for a quick sanity check against Date Difference Calculator if you want the total elapsed days rather than a years/months/days breakdown.
Leap years and the February 29 case
Age calculation gets an extra wrinkle for anyone born on February 29, since that date only exists in leap years. Most systems treat their birthday as February 28 (or March 1) in non-leap years for the purpose of everyday age, but the exact day-count still needs to correctly account for how many real leap days occurred between the birth date and today, since that changes the total day count even if it doesn't change the years/months figure. Understanding why leap years exist at all, and which years actually qualify, is covered in more depth in our guide on why leap years exist.

