Date & Time
Happy Birthday & Work Anniversary Alert Formula (MONTH & DAY)
Build an annual reminder from numeric dates, with an explicit February 28 policy for leap-day anniversaries in common years and calendar-day comparisons for timestamps.
Choose a leap-day policy
This example observes February 29 milestones on February 28 in common years. EDATE applies this month-end adjustment. DATE(year,2,29) instead rolls into March 1 in a common year, so those formulas are not interchangeable.
This is a reminder convention, not a rule for legal age, employment rights or benefits. Use the policy appropriate to the application.
=IF(COUNT(B2,D2)<>2,"Enter numeric dates",IF(OR(B2<1,D2<1),"Enter valid date serials",IF(INT(D2)<INT(B2),"Before milestone date",IF(EDATE(INT(B2),12*(YEAR(D2)-YEAR(B2)))=INT(D2),"Milestone: "&(YEAR(D2)-YEAR(B2))&" years", ""))))Use numeric date values
The workbook seeds dates with DATE(year,month,day), avoiding locale-dependent parsing of typed date strings. INT removes a timestamp's fractional day before comparison. Blank and text inputs are rejected, and dates before the original event are identified.
The output reports whole calendar years on the anniversary. On the event's original day it reports zero years. A nonmatching day returns empty text. Changing the reference date is deterministic; TODAY() can replace it when a live reminder is wanted.
Try the boundaries
Change B2 to DATE(1996,2,29). DATE(2026,2,28) gives 30 years, DATE(2026,3,1) gives no reminder, and DATE(2028,2,29) gives 32 years. Add 0.5 to the reference date to represent noon and verify that the same calendar-day reminder appears.
Try the example
Use the original values or change them to test your understanding.