How the dates are read, and what gets rejected
Write MM/DD/YYYY Name or YYYY-MM-DD Name. Dots and hyphens work as separators in place of slashes, and a comma or a tab between the date and the name is fine, so two columns pasted out of a spreadsheet come in cleanly.
A date that does not exist is rejected and listed with a reason. This is worth stating because most date handling does the opposite: hand a naive parser 02/30/2026 and it hands back March 2 without comment, and 02/29/2027 quietly becomes March 1. Both are the kind of error that survives until someone misses something. Here they come back as errors.
All arithmetic is done on local dates constructed from the numbers you typed. Nothing is routed through UTC, which is the usual reason a date entered as the 18th displays as the 17th for anyone in a negative offset.
Recurring against one-time
With recurrence on, a date already in the past is moved to the next time that month and day come around, and the table says which occurrence it is. That is the right behavior for birthdays and yearly renewals. With recurrence off, dates stay where they are and the last column counts how many days have elapsed since — the right behavior for a lease end, a warranty expiry or the day someone started a job.
The setting applies to the whole list, so a list that mixes both wants two runs, or one run with the one-time dates read from the D+ rows. Sorting always puts future dates first in ascending order of days remaining, then past dates, most recent first.
February 29 gets said out loud
A February 29 anniversary has no date to land on in three years out of four. This tool pulls it back to February 28 and marks the row, because the alternative — rolling to March 1 — moves the event out of February entirely, and silently doing either one is worse than saying which was chosen. If your household observes it on March 1, the honest fix is to enter it as March 1 and turn recurrence on.
The same clamping rule governs the anniversary milestones: the fifth anniversary of a January 31 date is January 31, but the anniversary of February 29 is February 28 in any year that is not a leap year. Day-count milestones are unaffected, because adding a number of days does not care what the month is called.
Two ways of counting that are not the same
Day milestones treat the start as day 1, so the 100th day is the start date plus 99. That is the convention behind "our hundredth day", and it is one off from a plain 100-day addition. Anniversaries use the calendar instead: the first anniversary is the same month and day one year later, which is 365 days in a common year and 366 when a February 29 falls in the interval. Both counts are shown for each date and they will disagree by a day or two; that is arithmetic, not a defect. If you are counting toward something with another person, agree which convention you are using before the day rather than after.
Questions people ask
Is today D-day or D-1?
The date you are counting from is shown as TODAY, the next day as D-1, and yesterday as D+1. Some traditions count the current day as one and would call tomorrow D-2. If a number here is exactly one off from what someone else is quoting, that difference in starting point is almost always the reason, and neither convention is wrong as long as everyone is on the same one.
Can I keep the list between visits?
No. Nothing is stored — the calculation happens in your browser and a refresh empties the box. Copy the text out into a note, or print the board. Pasting the same list back later reproduces exactly the same table, so keeping the raw text is as good as saving.
What does the federal holiday flag actually check?
It computes the eleven US federal holidays by rule for the year in question rather than reading them from a fixed table, so any year resolves, including future ones. When a fixed-date holiday falls on a Saturday the observed day is the Friday before, and on a Sunday the Monday after; those are marked "obs.". Juneteenth appears from 2021, the year it was established. State and local holidays are not included, and neither is any other country.
Why are milestones limited to six per event?
Because the useful ones are the next few. Each event generates seventeen candidate milestones across day counts and anniversaries, and printing all of them for a list of nine events produces pages nobody reads. The six shown are the next six ahead of your count-from date. If every milestone for an event is behind you, the last four are shown instead so the row is not empty.