Julian Day to date converter
Paste a Julian Day number and get the calendar date and clock time it marks: JD 2451545 is noon UT on 1 January 2000, and 2451544.5 is the midnight that starts that day. Fractions become hours, minutes and seconds. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Astronomical Julian Day Number
- 2,451,545
- Year
- 2,000
- Month
- 1
- Day
- 1
- Hour
- 12
This Julian Day to date converter takes a single astronomical Julian Day Number and returns the matching proleptic Gregorian calendar date plus Universal Time clock fields derived from the fractional day. The Julian Day is the continuous day count used in astronomy, ephemerides, and many scientific logs: JD zero point is noon Universal Time on the proleptic Gregorian date negative four thousand seven hundred thirteen November twenty-four, and every successive day increments the count by one. Whole numbers mark noon UT; a half fraction such as two million four hundred fifty-one thousand five hundred forty-four point five marks midnight at the start of the civil day. Small checks you may already know include two million four hundred fifty-one thousand five hundred forty-five point zero mapping to one January two thousand at twelve hours UT, the same integer minus zero point five mapping to that midnight, and two million four hundred forty thousand five hundred eighty-seven point five mapping to one January nineteen seventy at midnight UT.
What a Julian Day is and what you get
An astronomical Julian Day Number is a single real number that labels every moment on a continuous timeline without months or leap-year tables. Integer JD values fall at noon Universal Time; adding or subtracting zero point five moves the instant to the civil midnight that bookends that noon. Historical Julian-calendar civil dates after the sixteen eighty-two reform are intentionally not switched in; this page always reports the proleptic Gregorian date corresponding to the JD, which is the usual convention in modern astronomical software.
If you need Unix epoch conversion, ISO week numbers, or Easter Sunday, use those dedicated tools; this page answers only JD to Gregorian date.
How jd is read and how the conversion stays reproducible
Numeric strings with optional leading plus or minus signs and scientific notation are accepted when they parse as finite decimals; embedded spaces, hex prefixes, and empty strings are rejected with a clear message so a bad cell does not become a wrong calendar day. After parsing, the value must be finite: Infinity and NaN fail immediately because they cannot label a unique instant on the JD line. The magnitude must also sit inside the documented window so intermediate Meeus steps stay ordinary JavaScript safe numbers.
From a valid JD the engine sets Z to the floor of JD plus one half and F to the complementary day fraction from midnight UT, applies the Gregorian leap-century correction alpha, builds A through E with only floor division, then recovers day, month, and year exactly as in Meeus Astronomical Algorithms chapter seven with the Gregorian branch forced for every epoch.
Where Julian Day conversion fits in science, archives, and software
Observers and students meet Julian Day numbers in star charts, variable-star logs, and spacecraft event timelines that must stay continuous across month boundaries and leap years. Archivists who inherit observation tables often store only JD and need a civil Gregorian label for human readers, metadata indexes, or legal exhibit sheets.
Developers call the same contract from scripts to seed deterministic test vectors for astronomy libraries, to normalize mixed logs that interleave ISO dates and JD columns, or to satisfy product requirements that demand a published algorithm rather than a host-local Date parse that shifts with timezone settings. Educators use the tool to show why JD point zero is noon rather than midnight and why J two thousand is defined at noon on one January two thousand, without relying on opaque calculator apps that hide the day-fraction convention.
Pair it with epoch converters and other free deterministic date helpers when you are assembling a small lab of calendar utilities for teaching, research, or product features.
What you can do with it
Observation logs and ephemerides
Convert continuous Julian Day stamps from telescopes and catalogs into proleptic Gregorian dates and UT clock fields for reports and indexes.
FAQ
What does the Julian Day to date converter cost?
It is free in your browser on this page.
Which algorithm is used?
Jean Meeus, Astronomical Algorithms, chapter 7, with the Gregorian branch applied for every epoch (proleptic Gregorian).
What happens if jd is not finite?
NaN and positive or negative Infinity cannot label a unique Julian Day.
Is JD.0 midnight or noon?
Astronomical JD.0 is noon Universal Time. Civil midnights are usually written with a .5 fraction, for example 2451544.5 for 2000-01-01 00:00 UT.
Does this switch to the historical Julian calendar before 1582?
No. The converter always returns the proleptic Gregorian date for the given JD, matching common modern astronomical practice.
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/from-julian-day \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"jd":2451545}'const res = await fetch("https://api.kit.forhosting.com/date/from-julian-day", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"jd": 2451545
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/from-julian-day",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"jd": 2451545
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/from-julian-day", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"jd":2451545}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"jd":2451545}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/from-julian-day", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"jd": 2451545
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.from_julian_day",
"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.
Limits
jd_min | -1000000000 |
jd_max | 1000000000 |
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 a Julian Day Number is and what the response contains
This converter accepts one required field, jd, as a finite number within the documented magnitude range, then returns the echo of the input JD, the proleptic Gregorian year, month number from one to twelve, day of month, hour, minute, and second in UT, a day_fraction measured from midnight UT, a YYYY-MM-DD date string, a readable month name, an iso_date echo, a datetime_ut string with a trailing Z, the calendar tag gregorian, the algorithm tag meeus_proleptic_gregorian, and a short formula reminder of the Meeus chapter seven steps. There is no online ephemeris fetch, no timezone database, and no random sampling: either the number is finite and in range and the Gregorian fields are fully determined, or the request fails with invalid_input. Rejected cases include a missing jd, non-numeric tokens, NaN, positive or negative Infinity, and magnitudes outside the declared ceiling.
How jd is read and how the conversion stays reproducible
The preferred field is jd, but aliases julian_day, jdn, capital JD, and day are accepted so spreadsheets, query strings, and typed forms can reuse the same contract without renaming columns. Clock fields come from rounding the day fraction to the nearest second so JSON goldens stay stable. Pair the free browser run on this page with the priced API when you need the identical conversion inside an automated pipeline without re-implementing astronomical day counts yourself.
Where Julian Day conversion fits in science, archives, and software
On this page the work runs entirely in your browser; through the API each successful conversion costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the KIT tier-A catalog and lets you move from a lab demo to a multi-million-row archive pipeline without changing the mathematical result.
Integration use cases
Deterministic test fixtures
Generate reproducible year, month, day, and datetime_ut strings for astronomy library tests and CI assertions across many JD values.
Archive and ETL normalization
Map mixed scientific tables that store only JD into ISO-style Gregorian dates without timezone-sensitive host Date parsing.