Which anniversary number calculator
Find which anniversary a given day marks: someone hired on 15 March 2014 reaches their 10th work anniversary on 15 March 2024. The last and next anniversary dates are shown too. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Event date
- 2014-03-15
- As of
- 2024-03-15
- Anniversary number
- 10
- Anniversary ordinal
- 10th
- Last anniversary date
- 2024-03-15
- Next anniversary date
- 2024-03-15
People search for which anniversary number when they need a clear answer to a practical question: if someone was hired on a given calendar day, which work anniversary falls on a later date—the fifth, the tenth, the twenty-fifth? The same need appears for wedding anniversaries, product launch milestones, membership renewals, and service awards that fire on completed full years from an original event. Generic date-difference tools return total days or a full age breakdown; they do not say “this is the tenth anniversary” with an ordinal label and a flag for whether the as-of day is the observed anniversary day itself. This capability accepts two strict ISO calendar dates, validates Gregorian leap rules, counts completed full years with age-style month and day logic, treats February twenty-nine events as observed on February twenty-eight in non-leap years, and returns the anniversary number, English ordinal, last and next anniversary ISO strings, and a short formula.
How the anniversary number is computed from two ISO dates
Start with two civil calendar dates in the international ISO form year-month-day with fixed widths so every client agrees on the same six integers: the original event date (hire day, wedding day, founding day, first subscription charge) and the as-of date you want to label.
For each string confirm that the year lies in the practical Gregorian range from year one through nine thousand nine hundred ninety-nine, that the month is between one and twelve, and that the day exists for that month under Gregorian leap rules: a year is a leap year when it is divisible by four, except that century years are leap years only when they are also divisible by four hundred.
That rule makes February twenty-nine legal in years such as two thousand twenty-four and two thousand, and illegal in two thousand twenty-three and nineteen hundred. When both triples are valid and the as-of day is not earlier than the event, subtract the event year from the as-of year to get a candidate year count, then check whether the as-of month and day have already reached the observed anniversary day in the as-of year.
If the as-of day still sits before that observed month and day, subtract one so you never claim a completed anniversary that has not occurred yet. The observed anniversary day is the same month and day as the event, except that an event on February twenty-nine is observed on February twenty-eight in non-leap years so every year still has a concrete calendar day. On the event day itself the completed number is zero—the day of the event, not yet the first anniversary.
One year later on the observed day the number is one, ten years later it is ten, and so on.
Where which-anniversary calculators show up in real work
Human resources and people-operations teams generate service-award lists that say who reaches a fifth, tenth, or twenty-fifth work anniversary on a given calendar day or in an upcoming window, and they need a deterministic number rather than a free-text age string. Wedding and event planners schedule commemorative dinners on the exact anniversary day and want a clear ordinal for invitations and printed programs. Product and membership systems unlock badges, discounts, or loyalty tiers on completed years from signup or first purchase and must agree with the customer-facing anniversary page.
Journalists and internal newsletters write “marks ten years since launch” and need the completed count for a specific as-of day, not a raw day delta. If you later need absolute days between two unordered dates, age broken into years months and days, business-day counts that skip weekends, or pure day addition to a single base, treat those as separate search intents and landings rather than overloading this which-anniversary-number page.
What you can do with it
Work and service award lists
From a hire ISO date and an as-of day, get the completed work anniversary number and ordinal so HR can flag fifth, tenth, and twenty-fifth service awards without hand counting.
Wedding and personal milestones
Label which wedding or relationship anniversary falls on a planned celebration date, including whether that day is the exact observed anniversary day.
Membership and loyalty year gates
Unlock year-based badges or discounts when a member’s as-of day reaches a completed anniversary number from signup or first purchase.
FAQ
What is the anniversary number on the original event day?
Zero. The event day is the start, not yet the first anniversary. One year later on the observed day the number is 1; ten years later it is 10.
How are February 29 (leap day) events handled?
In non-leap years the anniversary is observed on February 28 so every year has a concrete calendar day. In leap years it remains February 29.
What number do I get if this year's anniversary has not arrived yet?
The previous one. Only completed years count, so on the day before 15 March 2024, someone hired on 15 March 2014 is still at their ninth anniversary, not the tenth.
Does it show when the next anniversary falls?
Yes. Along with the number, you get the date of the most recent anniversary and of the next one, plus a note saying whether the day you checked is the anniversary day itself.
Can I use it for weddings or company milestones?
Yes. Any original event works: a hire date, a wedding, a founding day or a first membership. Enter that event and the day you want to check, and the count works the same way.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/date/anniversary-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"event_date":"2014-03-15","as_of":"2024-03-15"}'const res = await fetch("https://api.kit.forhosting.com/date/anniversary-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"event_date": "2014-03-15",
"as_of": "2024-03-15"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/anniversary-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"event_date": "2014-03-15",
"as_of": "2024-03-15"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/anniversary-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"event_date":"2014-03-15","as_of":"2024-03-15"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"event_date":"2014-03-15","as_of":"2024-03-15"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/anniversary-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"event_date": "2014-03-15",
"as_of": "2024-03-15"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.anniversary_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What you send and what you get back
Send two required string fields: event_date and as_of, each a strict ISO calendar day such as two thousand fourteen hyphen zero three hyphen one five and two thousand twenty-four hyphen zero three hyphen one five. Common aliases such as hire_date, original, start, check_date, reference_date, and on are accepted by the same core so HR scripts and SEO forms can use familiar names without changing the math. Missing fields, non-string values, strings that do not match the four-two-two digit pattern, dates that match the pattern but are not real calendar days, and an as-of day earlier than the event all fail with invalid_input and are not charged. On success the response echoes the normalized event_date and as_of ISO strings; anniversary_number as the non-negative completed full years; anniversary_ordinal as the English label such as tenth or first; is_anniversary_day true when the as-of day matches the observed anniversary month and day in that year; last_anniversary_date and next_anniversary_date as ISO strings for the most recent anniversary on or before as-of and the next anniversary on or after as-of; first_anniversary_date when the first anniversary year stays inside the supported range; and a short formula string documenting the age-style rule and February twenty-nine observation. Classic checks include a hire date of two thousand fourteen March fifteen and as-of two thousand twenty-four March fifteen yielding anniversary number ten with is_anniversary_day true; the day before that tenth anniversary yielding nine with is_anniversary_day false; the event day itself yielding zero; and a leap-day event observed on February twenty-eight in a common year. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where which-anniversary calculators show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Technical questions
How do I find which anniversary number a date represents?
Send event_date and as_of as ISO YYYY-MM-DD strings. The API returns anniversary_number as completed full years from the event (age-style), plus anniversary_ordinal such as 10th, and is_anniversary_day when as_of matches the observed anniversary day.
What if as_of is before the event date?
The task fails with invalid_input. An anniversary number cannot be computed before the original event, and invalid input is not billed.
What does the which-anniversary-number calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.