Ethiopian to Gregorian date converter
The Ethiopian to Gregorian date converter turns one explicit year, month, and day from the Ethiopian calendar into the corresponding proleptic Gregorian calendar date.
Run — free
It understands all thirteen Ethiopian months, including the short month Pagumen and its leap-day rule. The calculation uses fixed integer calendar arithmetic, so the answer does not depend on the computer's locale, clock, time zone, or daylight-saving settings. The response includes an ISO-style date string and separate Gregorian year, month, and day fields for convenient display or automation.
Enter an Ethiopian date precisely
Provide the Ethiopian year, month, and day as integers. Months 1 through 12 always contain 30 days, while month 13 is Pagumen, the short period at the end of the year. Pagumen normally contains five days and contains a sixth day in an Ethiopian leap year. The converter requires every component because guessing an omitted year or interpreting a partial date would make the result ambiguous. It also rejects decimals, numeric strings, zero, negative values, months outside 1 through 13, and days that do not exist in the selected month. This strict input contract is useful in forms and data pipelines because an invalid source value becomes a clear error instead of silently rolling into another month. For example, year 2016, month 1, day 1 represents Ethiopian New Year and converts to its exact Gregorian calendar counterpart. Use the returned date string when you need a compact result, or use the separate numeric fields when your application stores calendar parts independently.
How the arithmetic conversion works
The calculation first maps the Ethiopian date to a fixed day count using the established Ethiopian calendar epoch. Each completed Ethiopian year contributes 365 days, the four-year leap cycle contributes its additional days, and completed months contribute 30 days each. The fixed count is then decoded with the proleptic Gregorian rules: years divisible by four are normally leap years, century years are not, and years divisible by 400 are leap years after all. Converting through one continuous day count avoids relying on platform date parsers, which generally do not accept Ethiopian calendar input and can introduce environment-specific behavior. It also makes the result deterministic for historical and future dates within the published range. No current date is consulted, and no time of day is created. The phrase UTC describes the stable, time-zone-neutral interpretation of the calendar day; it does not mean that the input is shifted through a UTC offset. The output is the corresponding Gregorian calendar day itself, calculated entirely with bounded integer arithmetic.
Use the result safely in applications
The response returns a date field formatted as year-month-day, followed by numeric year, month, and day properties. This structure works well for database imports, archival indexes, civil-record workflows, historical research notes, and integrations that need to exchange dates with systems using the Gregorian calendar. Treat the output as a calendar date rather than an instant. If a later step needs a timestamp, that step must separately choose a time, location, and time-zone policy; this converter deliberately does not invent those details. The capability uses the arithmetic Ethiopian calendar and does not attempt to interpret handwritten text, localized month names, uncertain dates, eras before year 1, or alternative scholarly chronologies. Run it in the browser for an occasional conversion, or call the API for $0.002 when validation and conversion belong in a repeatable workflow. Because the same pure solver handles the computation, a given valid input produces the same JSON result in every supported execution channel without network access or mutable state.
What you can do with it
Normalize civil records
Convert Ethiopian calendar fields into a Gregorian date before importing records into a system that expects Gregorian dates.
Prepare international schedules
Translate a known Ethiopian event date into the Gregorian day used by partners, calendars, and planning tools elsewhere.
Index historical material
Add a deterministic Gregorian equivalent to documents cataloged with explicit Ethiopian calendar dates.
FAQ
What does one conversion cost?
One API conversion costs $0.002. You can also run the converter in your browser without an API charge.
Does the Ethiopian calendar have thirteen months?
Yes. Months 1 through 12 have 30 days each, and month 13, Pagumen, has five days or six in a leap year.
How are Ethiopian leap years handled?
The arithmetic four-year cycle is applied. An Ethiopian year whose remainder after division by four is three has a sixth Pagumen day.
Does time zone affect the result?
No. The input and output are calendar days computed without a time, offset, local clock, or daylight-saving rule.
Can I submit a date as text?
No. Supply year, month, and day as separate integers so the date is explicit and can be validated without language-dependent parsing.
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/ethiopian-to-gregorian \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2016,"month":1,"day":1}'const res = await fetch("https://api.kit.forhosting.com/date/ethiopian-to-gregorian", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"year": 2016,
"month": 1,
"day": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/ethiopian-to-gregorian",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"year": 2016,
"month": 1,
"day": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/ethiopian-to-gregorian", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"year":2016,"month":1,"day":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"year":2016,"month":1,"day":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/ethiopian-to-gregorian", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"year": 2016,
"month": 1,
"day": 1
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.ethiopian_to_gregorian",
"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. |