Skip to main content

Hebrew and Gregorian date conversion accuracy

Converting between Hebrew and Gregorian dates for very early years is mathematically possible (and is supported by our Hebrew Date Converter), but the results should be treated as approximations rather than historically precise dates.

The Hebrew calendar evolved into a fixed, calculation-based system beginning in the 4th century CE, traditionally associated with reforms attributed to Hillel II (a fifth generation amora). This shift replaced earlier dependence on eyewitness moon sightings and centralized rulings on leap years with a predictable mathematical framework. The detailed rules were recorded in writing over the following centuries and were later systematized by Maimonides in the 12th century, by which point the calendar had become uniform across Jewish communities by the medieval era.[1]

Before the calendar rules were fully standardized in the early medieval period, both the Hebrew and civil calendars were influenced by local practice, observational methods, and later retroactive calculations. As a result, modern algorithms can project dates backward consistently, but they may not reflect how dates were actually observed or recorded at the time.

Any results for year 1752 CE and earlier published on Hebcal.com will be inaccurate. Hebcal does not take into account a correction of ten days that was introduced by Pope Gregory XIII known as the Gregorian Reformation.

Encyclopædia Britannica has an excellent introduction to the Jewish calendar. Another well written treatment of the Jewish calendar can be found in Understanding the Jewish Calendar by Rabbi Nathan Bushwick.

Hebcal 2025 Year in Review

We’ve been hard at work this past year making Hebcal easier to use and a more complete resource. Here is a summary of the changes we’ve made (major and minor) during the past Gregorian year.

Fully Hebrew calendars

Major contribution by Doron Behar

In December 2025, Hebcal added support for fully Hebrew calendars, introducing a fundamentally different calendar model from the traditional Gregorian-first layout. Instead of presenting Gregorian months with Hebrew dates as annotations, this new mode uses Hebrew months as the primary structure, with Gregorian dates shown as secondary, auxiliary information.

This inversion more closely reflects how the Hebrew calendar is traditionally experienced, making Hebrew months, holidays, and week structures first-class elements rather than overlays. Printable full-year PDF output is also supported.

You’ll find the new options on our custom Jewish calendar page:

Holidays

We corrected Sigd date handling when 29 Cheshvan falls on Shabbat. Sigd is normally observed on 29 Cheshvan, but when that date coincides with Shabbat (as in Hebrew year 5785), the holiday is observed earlier, on Thursday, in accordance with Israeli law. This matches actual practice, as reported in contemporary coverage such as the Jerusalem Post.

Torah Readings

We added the Megillah reading for the morning of Tisha B’Av, corrected Ashkenazic transliteration for Shabbat Chol ha-Moed Sukkot, fixed the Hebrew spelling of Korach with niqqud (קֹרַח) and without (קורח). Aliyah divisions for Parashat Terumah now align with Koren, Etz Hayyim, and the USCJ Luach.

The Parsha Year page is now easier to read on both mobile devices and large screens.

Daily Learning calendars

We added four new study cycles added to the existing suite of perpetual learning calendars:

Perek Yomi introduces an alternate option for Mishnah study: one full chapter per day. This complements the already-available Mishna Yomi calendar (two mishnayot per day) by offering a faster, chapter-based rhythm that completes the Mishnah on a shorter cycle. The Mishnah, redacted around 200 CE, is the foundational text of the Oral Torah and the basis for later Talmudic discussion.

Daily Rambam (Maimonides’ Mishneh Torah) now includes support for the traditional three-chapters-per-day track, in addition to the existing one-chapter-per-day option.

Sefer HaMitzvos Yomi adds a daily study calendar for Rambam’s enumeration of the 613 commandments. This cycle focuses on one or more mitzvot each day, offering a thematic alternative to chapter-based halachic study. The cycle takes just under one year to complete.

Kitzur Shulchan Aruch Yomi provides a daily learning cycle for Rabbi Shlomo Ganzfried’s concise halachic compendium, covering practical Jewish law for everyday life. The yomi schedule allows learners to complete the work over the course of one Hebrew year.

Developer web APIs

We have added experimental support for the new Model Context Protocol (MCP) standard to enable AI models such as Claude, ChatGPT and Gemini to access and interact with more precise Hebrew calendar and Jewish holidays instead of relying on built-in “knowledge”. Supported Hebcal MCP methods include bidirectional conversion between Gregorian and Hebrew dates, Yahrzeit calculation, weekly Torah portion lookup, Jewish holiday listings for an entire civil year, and daily learning schedules such as Daf Yomi. Hebcal’s remote MCP server URL is available at https://www.hebcal.com/mcp

Assur Melacha (work forbidden) API: Hebcal.com now offers an experimental REST API for determining for a given location if the date and time has a melacha (work) prohibition. This API can be used by home automation systems or other applications that wish to change functionality when Shabbat or yontiff begins or ends.

The Yahrzeit + Anniversary REST API now supports Hebrew dates as an alternative to Gregorian dates, e.g. &hyX=5769&hmX=Cheshvan&hdX=15. Hebrew month names may be specified in Hebrew (UTF-8) or transliterated using the same technique as on the Hebrew Date Converter REST API.

Localization

We added Portuguese translations, courtesy Zushe Ledovitch.

The Jewish calendar REST API now supports Hebrew memo. These translations were AI-assisted and may need some edits.

Miscellaneous / UI and usability

Molad announcements were shortened and clarified (from “Molad Sivan: Fri, 35 minutes and 10 chalakim after 3:00pm” to “Molad Sivan: Friday, 3:35pm and 10 chalakim“). Shabbat Mevarchim pages now display Molad times.

We added CSV download support for Shabbat Candle-lighting times (year-at-a-glance / “Refrigerator times”).

When selecting a city for candle-lighting and fast times, our typeahead search now includes a clear (×) button.

iCalendar feeds now include the newer REFRESH-INTERVAL and improve compatibility by fixing default to be P7D.

To reduce server load of spiders/robots indexing extreme past (Gregorian year 100 or earlier) and far-future years (Gregorian year 3000 or later), the website no longer publishes detailed holiday or Torah reading pages. Converting between Hebrew and Gregorian dates for very early years is mathematically possible (and still supported by our Hebrew Date Converter), but the results should be treated as approximations rather than historically precise dates. See Hebrew and Gregorian date conversion accuracy for more details.

Following modern HTTP semantics, we transitioned broadly to ETag-based caching, removing Last-Modified headers. This improves CDN behavior and client cache correctness.

@hebcal/core 6.0.0 release

We’re pleased to announce a major update to @hebcal/core, our TypeScript implementation of perpetual Jewish Calendar with holidays, Shabbat and holiday candle lighting and havdalah times, Torah readings, and more. The library targets both browser-based JavaScript and server-side Node.js.

Version 6.0.0 is a breaking change which removes support for CommonJS and Node.js 16.x, and includes the following small API changes:

1. ParshaEvent constructor now takes a single SedraResult argument.

Change this:

    const parsha = sedra.lookup(hdate);
    if (!parsha.chag) {
      const pe = new ParshaEvent(hdate, parsha.parsha, il, parsha.num);
    }

To this:

    const parsha = sedra.lookup(hdate);
    if (!parsha.chag) {
      const pe = new ParshaEvent(parsha);
    }


2. We have remove deprecated APIs:

  • Event.clone()
  • HolidayEvent.clone()
  • Sedra.get() – use Sedra.lookup().parsha
  • Sedra.getString() – use new ParshaEvent(Sedra.lookup()).render()
  • Sedra.isParsha() – use !Sedra.lookup().chag
  • Locale.useLocale() – removed concept of global “active” locale
  • Locale.getLocaleName() – removed concept of global “active” locale

Full API documentation is at hebcal.github.io/api/core/

Jewish calendar Model Context Protocol (MCP)

Hebcal.com is pleased to announce experimental support for Model Context Protocol (MCP), an open standard to enable AI models to access and interact with external tools and data sources.

Hebcal’s remote MCP server URL is:

https://www.hebcal.com/mcp

Claude users: read Getting started with Custom Integrations Using Remote MCP

MCP tools

convert-gregorian-to-hebrew
Converts a Gregorian (civil) date to a Hebrew date (Jewish calendar)

convert-hebrew-to-gregorian
Converts a Hebrew date to a Gregorian (civil) date

yahrzeit
Calculates the Yahrzeit, the anniversary of the day of death of a loved one, according to the Hebrew calendar for a specified date

torah-portion
Calculates the weekly Torah portion (also called parashat haShavua) for a specified date

jewish-holidays-year
Calculates a list of all Jewish holidays during a Gregorian (civil) year

daf-yomi
Calculates the Daf Yomi (Babylonian Talmud) learning for a specified date

Assur Melacha (work forbidden) API

Hebcal.com now offers an experimental REST API for determining for a given location if the date and time has a melacha (work) prohibition. This API can be used by home automation systems or other applications that wish to change functionality when Shabbat or yontiff begins or ends.

Although there are many opinions on the time of tzais, for simplicity this function uses solar depression of 8.5 degrees. More about Havdalah.

Note that this is a web API with the same functionality as the isAssurBemlacha API provided by the JavaScript @hebcal/core package. If you’re building a JavaScript application, consider using the native JS library instead of web APIs for a faster user experience.

The basic URL format is as follows:

https://www.hebcal.com/zmanim?cfg=json&im=1&geonameid=3448439&dt=2025-06-21T20:08:10Z

Parameters and their meanings

  • cfg=json – output JSON. Required
  • im=1 – enable issur melacha mode. Required
  • Location: Specify the desired location using GeoNames.org numeric ID, United States ZIP code, or latitude/longitude. This page also describes how to enable/disable the optional elevation for sunset calculation.
  • dt=YYYY-MM-DDTHH:mm:ss.sssZ – optionally specify an exact time to check
    • If specified, the date-time must follow the ISO 8601 Date time string format
      • Note Z is the timezone offset, which can either be the literal character Z (indicating UTC), or + or - followed by HH:mm, the offset in hours and minutes from UTC. If using a UTC positive time zone offset, take care to url-encode the + as %2b
      • If the date-time does not end with a time zone offset, the time will be interpreted as the local timezone of the location specified
    • If this optional date-time parameter is absent, the API will use the current local time at the location

Example output

{
  "date": "2025-06-23T04:52:52.475Z",
  "version": "5.10.0-3.4.1",
  "location": {
    "title": "São Paulo, Brazil",
    "city": "São Paulo",
    "tzid": "America/Sao_Paulo",
    "latitude": -23.5475,
    "longitude": -46.63611,
    "cc": "BR",
    "country": "Brazil",
    "admin1": "Sao Paulo",
    "asciiname": "Sao Paulo",
    "geo": "geoname",
    "geonameid": 3448439
  },
  "status": {
    "localTime": "2025-06-21T17:08:10-03:00",
    "isAssurBemlacha": true
  }
}

Usage notes

As with all Hebcal.com REST APIs:

  • Both HTTP and HTTPS (HTTP/2) are supported. Although most of the Web has moved to HTTPS, if you wish to reduce CPU overhead on your client you may continue to use plain (port 80) HTTP for API requests
  • We encourage HTTP caching proxies. Proper Cache-Control and Expires are generated in the response
  • We support both gzip and br (brotli) compression; set the appropriate Accept-Encoding header in your request to enable
  • We support HTTP Keep-Alive for multiple requests

Licensing

Content generated by the Hebcal.com web APIs is licensed under a Creative Commons Attribution 4.0 International License. This means that you can use you are free to copy and redistribute the material in any medium or format as long as you give appropriate credit to Hebcal.com.