Working Out an Anniversary
Published 8/25/2026 · 11 min read · Everyday calculators
Antonio Delgado — Traditions & pastimes writer at OneKitly
Symbolism · Calendars
Checked against 3 sources
Give it 20 June 2015 and ask on 28 August 2026, and the calculator returns two answers that are not the same answer. Elapsed: 11 years, 2 months and 8 days, which is 4,087 days, 583 weeks, 134 whole months, 98,088 hours and 5,885,280 minutes. Ahead: the next anniversary falls on 20 June 2027, it will be the 12th, and it is 296 days away. Eleven behind, twelve ahead — that is not a bug, it is the difference between counting completed years and numbering the one about to arrive, and the two are computed by different code. The elapsed figure walks year, month and day fields and borrows when the day of month goes negative; the countdown builds the same month and day in the reference year, steps to the next year if that date has already gone, and subtracts. For a wedding it also reads two rows off the gift lists — the year just completed, which at eleven years is steel on both the British and the American list with fashion jewellery as the modern equivalent, and the year coming, which at twelve is silk and linen in Britain, silk in America, and pearls or coloured gems modern. The only arithmetic that is genuinely difficult in all of this is 29 February, and the whole of the next section is about the choice this tool makes there.
Counting back and counting forward are two different sums, and they disagree by a year on the day itself. What this calculator does with 29 February, what other date libraries do, and where the traditional and modern gift lists actually come from.
29 February plus one year has no arithmetic answer
There is no calculation that settles it, because the target date does not exist. Every system that adds years to a date has had to pick a convention, and the two available are to clamp back to the last day that does exist, giving 28 February, or to let the overflow run forward, giving 1 March. This calculator clamps. It builds the anniversary by asking for the same month and day in the target year, checks whether the month it got back is the month it asked for, and steps the day back by one when it is not — which for a 29 February start produces 28 February in 2021, 2022, 2023, 2025, 2026, 2027, and 29 February again in 2024 and 2028. It never proposes 1 March, in any year.
It is in good company. Java's LocalDate.plusYears documents exactly this rule and gives the same worked example: 2008-02-29 plus one year would be the invalid 2009-02-29, so the last valid day of the month, 2009-02-28, is selected instead. The Temporal API now landing in JavaScript does the same by default, because its overflow option defaults to constrain, which clamps an out-of-range value to the nearest in-range one; ask it for reject instead and it throws rather than choosing for you. The odd one out is the JavaScript Date object that has been in every browser for thirty years: take 29 February 2020 and set the year to 2021 and you get 1 March 2021, because day 29 of a 28-day February simply rolls forward.
The clamp has a consequence inside this tool that is worth seeing before it confuses you. Set a start of 29 February 2020 and ask on 28 February 2025. The countdown says the fifth anniversary is today, in 0 days. The elapsed counter, on the same screen, says 4 years, 11 months and 30 days. And the gift card shows the fourth year — fruit and flowers — not the fifth. The two halves of the page are a year apart, and both are following their own rule correctly: the countdown clamped the anniversary onto 28 February, while the elapsed count refuses to call a year complete until the calendar actually reaches 1 March. On 1 March the elapsed figure jumps to 5 years exactly and everything agrees again.
Counting back and counting forward are different sums
“How long have we been together” and “when is our next anniversary” look like two views of one number and are not. The first is a difference between two dates, expressed in three units that borrow from each other; the second is a search for the nearest future occurrence of a month-and-day, which may or may not exist in the year you land in. The tool computes both and shows them side by side, and it is worth reading the pair rather than one: eleven years elapsed and a twelfth anniversary coming is the normal state of affairs for every day of the year except the anniversary itself.
The elapsed breakdown is calendar arithmetic and inherits every irregularity of the calendar. Three months is not ninety days: from 1 January to 1 April 2026 it is 90, from 1 June to 1 September it is 92, and from 1 February to 1 May it is 89. All three read as exactly 3 months on screen, and all three are correct. The total in days beside them is the figure to use for anything that has to add up, because it is a plain subtraction of two midnights and carries no convention at all.
Where the gift lists actually come from
This is the part people search for, and it deserves to be said plainly: no standards body publishes any of it. The oldest source you can actually open is Emily Post's Etiquette of 1922, and its list has eight entries — 1 year paper, 5 wood, 10 tin, 15 crystal, 20 china, 25 silver, 50 gold, 75 diamond — with a paragraph noting that paper, wooden and tin presents are seldom anything but jokes, and that crystal is the earliest anyone takes seriously. That is the whole canon in 1922. Everything between those milestones was filled in later.
The tool ships two traditional columns rather than one, because the British and American lists genuinely diverge and merging them would invent a consensus that does not exist. Year six is sugar in Britain and iron in America. Year eight is salt and bronze in Britain, bronze and pottery in America. Year nine is copper and pottery in Britain, pottery and willow in America. Past twenty-five they converge — silver, pearl, ruby, gold, diamond — and the disagreement stops mattering. The third column, the modern one, is a different animal: the tool attributes it to a list published in 1937 by the American National Retail Jeweler Association, and that attribution is repeated everywhere online but could not be confirmed here from a primary source. Read it as a widely used trade compilation, not as a documented origin.
Where the lists go silent, the tool says so rather than filling the gap. Years sixteen to nineteen and twenty-one to twenty-four have no traditional gift in either column, and the page prints that neither list assigns one — which is more useful than a blank, and considerably more useful than a material invented to complete the sequence.
The milestone ladder, and its one duplicate
Alongside the anniversary the tool lists the next six round numbers you will pass, drawn from three ladders at once: days (100, 365, 500, 1000 and on to 30,000), weeks (500 to 3000 in steps of 500) and years (1, 5, then every five to 80). For a start of 20 June 2015 asked on 28 August 2026 it returns 5,000 days on 26 February 2029, fifteen years on 20 June 2030, 6,000 days on 23 November 2031, 7,000 days on 19 August 2034, 1,000 weeks on 19 August 2034, and twenty years on 20 June 2035.
Read that list again and two rows are the same date. 7,000 days is exactly 1,000 weeks, so the day ladder and the week ladder collide there and both entries are kept, spending two of the six available slots on one event. It is the only place the two ladders meet — none of the other week milestones lands on a day milestone — so it is a one-row curiosity rather than a systematic problem, but it does mean that on some dates you are shown five distinct milestones rather than six.
One cosmetic thing you will notice on every language of the page: the ordinal marker beside the next anniversary is the French superscript e, hard-coded, so an English reader sees a twelfth anniversary written as “12ᵉ anniversary” and a German reader as “12ᵉ Jahrestag”. Nothing is miscounted — 12 is 12 — but the suffix belongs to one of the six languages and is printed in all of them.
| Where | Answer | Rule it follows |
|---|---|---|
| This calculator | 28 February 2021 | Steps the day back by one when the month overflows |
| Java LocalDate.plusYears | 28 February 2021 | Documented: the last valid day of the month is selected instead |
| Temporal, default overflow | 28 February 2021 | “constrain” clamps an out-of-range value to the nearest in-range one |
| Temporal with overflow: reject | An error | Refuses to choose, and makes you decide |
| Plain JavaScript Date | 1 March 2021 | Day 29 of a 28-day February rolls into the next month |
| The next real 29 February | 29 February 2024 | Four years on; the calculator offers this date in leap years |
Frequently asked questions
- What does this calculator do with a 29 February anniversary?
- It moves it back to 28 February in ordinary years and keeps it on 29 February in leap years. Run a 29 February 2020 start through a decade and you get 28 February in 2021, 2022, 2023, 2025, 2026, 2027, 2029 and 2030, with 29 February in 2024 and 2028. It never offers 1 March. One consequence to watch: on 28 February of a non-leap year the countdown will tell you the anniversary is today while the elapsed counter still reads a year short, because the elapsed count only completes the year when the calendar reaches 1 March.
- Why does it say eleven years elapsed and a twelfth anniversary coming?
- Because those are two different questions. Elapsed years counts what is finished: eleven full years have gone by. The next anniversary numbers the one about to happen, and the one about to happen is the twelfth. It is exactly like a birthday — you are eleven for the whole of the year that ends on your twelfth. The two figures agree only on the anniversary itself, when the countdown reads zero days and the elapsed years catch up.
- Why is “3 months” not the same number of days every time?
- Because months are not a unit of fixed length, and the elapsed breakdown is calendar arithmetic rather than division. From 1 January to 1 April 2026 is 90 days, from 1 June to 1 September is 92, from 1 February to 1 May is 89 — all three display as exactly 3 months, and all three are right. If you need a figure that adds up or compares across periods, use the total in days beside it: that one is a straight subtraction of two midnights and carries no convention at all.
- Where do the traditional and modern gift lists come from?
- From etiquette writing and, later, from the jewellery trade — not from any standards body. The oldest list you can read for yourself is in Emily Post's Etiquette of 1922, and it has eight entries: paper at one year, wood at five, tin at ten, crystal at fifteen, china at twenty, silver at twenty-five, gold at fifty and diamond at seventy-five. Everything filling the gaps came afterwards, and the British and American traditional lists disagree at six, eight and nine years, which is why the tool shows them in two columns instead of merging them. The modern column is widely credited to a 1937 trade publication; that attribution could not be checked against a primary source here.
- Why do two of the milestone rows show the same date?
- Because 7,000 days and 1,000 weeks are the same instant, and the tool draws its milestones from a day ladder and a week ladder at once without checking whether the two collide. They collide exactly once — no other week milestone lands on a day milestone in its lists — so it costs you one of the six slots on the one occasion it happens. Nothing is computed wrongly; you are simply shown five distinct future events instead of six around that date.
Articles you may find interesting
All guides →Related tools
This describes what these calculators do today, checked by running their own code, not what they ought to do. Wind chill and dew point are models with published limits, not measurements: no thermometer reads a wind chill, and neither index replaces an official forecast or a cold-weather or heat warning from your national weather service. If you are deciding whether it is safe to be outside, or how long, read the warning, not the calculator. The clock and calendar conventions described here are conventions, not law: how a contract, an insurer or a court reads "midnight" or an anniversary date is a legal question that differs by country, and the answer a piece of software gives is not evidence of it.
Sources
- Project Gutenberg — Emily Post, Etiquette in Society, in Business, in Politics and at Home (1922) — The “Wedding Anniversaries” list as it stood in 1922, with eight entries — 1 year paper, 5 wood, 10 tin, 15 crystal, 20 china, 25 silver, 50 gold, 75 diamond — and the remark that paper, wooden and tin presents are seldom anything but jokes, crystal being the earliest taken seriously
- Oracle — Java SE API documentation — java.time.LocalDate, plusYears(long) — “2008-02-29 (leap year) plus one year would result in the invalid date 2009-02-29 (standard year). Instead of returning an invalid result, the last valid day of the month, 2009-02-28, is selected instead.”
- TC39 — Temporal proposal documentation — Temporal.PlainDate — the overflow option: in “constrain” mode, the default, out-of-range values are clamped to the nearest in-range value; in “reject” mode an out-of-range addition throws a RangeError instead
Spotted a mistake in this article?