Skip to main content

Birth Date, Time and Time Zone

Every chart is calculated for one instant. The API builds it from the local date and time you send and the place's time zone. This page describes the rules, so the same input always gives the same chart.

The inputs​

FieldFormatNotes
dateYYYY-MM-DD1800-01-01 to 2099-12-31.
timeHH:MM, 24-hour, local clock timeOmit it when the birth time is unknown (see below).
timezoneIANA name, e.g. Asia/KolkataRequired with latitude/longitude, unless utc_offset is given. Not needed with location.
utc_offset±HH:MM or ±HH:MM:SSOptional. Overrides the offset the time zone would give.

How the local time becomes an instant​

  1. Time zone rules. The API uses the IANA time zone database, pinned to a known release (currently 2026d), with each zone's full history: daylight saving and wartime offsets in the past, and the current rules for dates ahead.
  2. Before standard time: local mean time of the birthplace. Until a region adopted a standard time, clocks kept local mean time. For those dates the IANA database gives the mean time of the zone's reference city for the whole zone, which can be an hour or more off for a birth elsewhere. The API uses the birthplace's own mean time instead: longitude ÷ 15 hours (for example +4:51:31 for Mumbai in 1850).
  3. Clock gaps. A local time that never showed on the clock (the hour skipped when daylight saving starts) is read with the offset in force before the change: 02:30 in New York on 2021-03-14 is read as 03:30 EDT.
  4. Clock overlaps. A local time that showed twice (the hour repeated when daylight saving ends) is read as its first occurrence. Send utc_offset to choose the other one.
  5. Explicit offsets win. utc_offset replaces all of the above. Use it when the birth record states the offset, or for historical local times the database cannot represent (for example a city that kept its own railway time).

Civil UTC is then converted to the Universal Time (UT1) that planetary positions are computed in, accounting for leap seconds.

What the response tells you​

POST /v1/astro/natal returns a birth_moment object:

"birth_moment": {
"utc": "1985-11-12T01:15:00Z",
"utc_offset": "+05:30",
"offset_basis": "iana",
"local_time_status": "ok"
}
  • offset_basis: iana, local_mean_time (birthplace mean time, rule 2) or explicit_offset (utc_offset was sent).
  • local_time_status: ok, nonexistent (rule 3 applied) or ambiguous (rule 4 applied).

Unknown birth time​

Omit time when the birth time is not known. The chart is cast for sunrise at the birthplace on that date, to the second, and birth_time_provided is false. Signs of the slower planets are usually still right; the Moon moves about 13° a day, so its nakshatra may not be, and anything that depends on the lagna (houses, the ascendant, arudhas, divisional charts) is not reliable. Do not send "00:00" for an unknown time: it means a birth at midnight.