French Republican calendar
Find the Revolutionary date of any day since the calendar began: 22 September 1792 is 1 vendémiaire, Year I. It also works backwards, from a republican year, month and day to the Gregorian date. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Date
- 1792-09-22
- Conversion direction
- gregorian_to_republican
- Gregorian date
- 1792-09-22
- French Republican year
- 1
- French Republican month
- vendemiaire
- Day of month
- 1
Convert Gregorian civil dates to the French Republican calendar and back with deterministic pure logic. Free, private, no account required.
Twelve equal months and a few extra days
The French Republican calendar counts its days from 22 September 1792, the founding equinox of Year I. Every year has twelve months of exactly 30 days, named in the classic sequence from vendémiaire to fructidor, followed by a block of five complementary days, the sans-culottides, or six in a sextile year. A common year therefore still has 365 days, like a Gregorian one, but the months never change length. Converting a date means counting how many days have passed since the calendar began and fitting them into republican years and months.
Reading the result without mix-ups
The result shows the republican year, the month name, its number from 1 to 13, the day and the day of the year, next to the Gregorian date you entered, so you can quote both in an essay. Leap years follow a simplified teaching rule: a year is sextile when the year plus one divides evenly by four. Historians who work from Romme's proposal or from the historical equinox tables may see a one-day difference in some years, so state which rule you used. Dates before 22 September 1792 are rejected, because the calendar had not begun.
How the Republican calendar is modeled
The French Republican calendar begins on twenty-two September seventeen ninety-two, the founding equinox of Year I. Each common year has three hundred sixty-five days and each leap year three hundred sixty-six, with leap years defined here by the simplified educational rule that a republican year is sextile when year plus one is divisible by four. Twelve months of thirty days each cover three hundred sixty days; the remaining five or six complementary days form the sans-culottides block with month index thirteen.
Month names follow the classic sequence from vendemiaire through fructidor. The converter validates ISO Gregorian strings, rejects dates before the republican epoch, walks year lengths until the day offset fits, and returns republican year, month name, month index, day, and day of year together with the original Gregorian date.
Determinism, limits, and integration
The implementation is pure parse-tier logic with no network, clocks, or randomness, so identical inputs always produce identical outputs. Extremely large republican years fail with an out-of-range style message rather than overflowing silently. Because educational tables sometimes differ on historical leap lists, document the simplified rule used here when you present results to historians who expect the Romme or historical equinox tables.
What you can do with it
History homework
Convert Revolutionary-era dates for essays with reproducible answers.
Automation
Call the same pure function from scripts without a spreadsheet.
FAQ
Is this free?
Yes. Tier A runs entirely in your browser without an account.
When does the French Republican calendar start?
It starts on 22 September 1792, the founding equinox of Year I, so that day is 1 vendémiaire of Year I. Earlier Gregorian dates are rejected, because the calendar did not exist yet.
How are leap years counted in the republican calendar?
This converter uses a simplified teaching rule: a republican year is sextile, with one extra day, when the year plus one divides evenly by four. Tables based on the historical equinox or on Romme's proposal can differ.
What are the sans-culottides?
They are the five complementary days, six in a sextile year, that follow the twelve 30-day months and close the year. The converter treats them as a thirteenth block that comes after fructidor.
Can I convert a republican date back to the Gregorian calendar?
Yes. Choose the reverse conversion and enter the republican year, the month from 1 to 13 and the day. Days 1 to 30 work in the twelve regular months; the complementary block takes 1 to 5, or 1 to 6 in a sextile year.
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/french-republican \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2020-01-01","direction":"gregorian_to_republican"}'const res = await fetch("https://api.kit.forhosting.com/date/french-republican", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"date": "2020-01-01",
"direction": "gregorian_to_republican"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/french-republican",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"date": "2020-01-01",
"direction": "gregorian_to_republican"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/french-republican", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"date":"2020-01-01","direction":"gregorian_to_republican"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"date":"2020-01-01","direction":"gregorian_to_republican"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/french-republican", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"date": "2020-01-01",
"direction": "gregorian_to_republican"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.french_republican",
"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
Both conversion directions
Days one through thirty are valid in months one through twelve; complementary days accept one through five or six depending on the sextile flag for that year. Use direction gregorian_to_republican with a date field formatted as four-digit year, hyphen, month, hyphen, day. The reverse direction republican_to_gregorian requires republican_year, month_index from one to thirteen, and day. Invalid types, inverted ranges, and out-of-range day numbers raise clear invalid_input errors with stable English message fragments the certification harness can match.
Determinism, limits, and integration
Review the published schema for date, direction, republican_year, month_index, and day before wiring metrics.
Integration use cases
Teaching demos
Show month names and sans-culottides with golden fixtures that match the free widget.
Technical questions
Does it call the network?
No. The parse engine keeps everything on-device.
What if my input is invalid?
You receive invalid_input with a clear English message.
Are results stable?
Yes. Deterministic math and golden examples freeze the contract.
Who authors this capacity?
Aspire on the ForHosting KIT workshop.