Skip to main content

Display a Jewish Calendar on your website with Hebcal + FullCalendar.io

To display a Jewish calendar on your website, you can use event data from Hebcal.com and the open source JavaScript event calendar from fullcalendar.io.

Here’s a quick template to give you an idea of how to edit the HTML on your site.

<!DOCTYPE html>
<html lang="en"><head>
<meta charset="utf-8">
<title>Jewish Calendar</title>
<link href="hebcal-styles.css" rel="stylesheet">
</head>
<body>
<div id="calendar"></div>
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.9/index.global.min.js" integrity="sha384-wv6yRjQC0TqzEnAjFQVXM2V0JrF6Nk0dh6QAGf1RwzTqPArdwU3luBZjVCi2YSVH" crossorigin="anonymous"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
  var calendarEl = document.getElementById('calendar');
  var calendar = new FullCalendar.Calendar(calendarEl, {
      initialView: 'dayGridMonth',
      headerToolbar: {
        left: 'title',
        right: 'prev,next today',
      },
      eventDisplay: 'block',
      events: {
          // add &c=on&geonameid=[locationID] for candle-lighting times
          url: "https://www.hebcal.com/hebcal?cfg=fc&v=1&i=off&maj=on&min=on&nx=on&mf=on&ss=on&mod=on&lg=s&s=on",
          cache: true
      }
  });
  calendar.render();
  // optional: bind keyboard left/right arrow keys
  // to move calendar forward/backward by a month
  document.addEventListener('keydown', function(e) {
    if (e.key === 'ArrowLeft' && !e.metaKey) {
      calendar.prev();
    } else if (e.key === 'ArrowRight' && !e.metaKey) {
      calendar.next();
    }
  });
});
</script>
</body>
</html>

Note on line 9 we use the CDN-hosted FullCalendar JavaScript. If you want to self-host the FullCalendar, you can do so following the FullCalendar Basic Usage instructions.

Note lines 18-22 where we specify the FullCalendar events configuration. We use a url on line 20 that fetches events from Hebcal. You can make other changes such as enabling candle-lighting times, Daf Yomi, etc and changing the event display language (default Sephardic transliterations). See the Jewish calendar REST API documentation for full details on what each parameter means. Remember to use cfg=fc for the FullCalendar format.

You won’t need to specify a year=YYYY parameter, as the fullcalendar.io script automatically sends start=YYYY-MM-DD and end=YYYY-MM-DD parameters for you.

For best performance, be sure to use cache: true (line 21).

If you’d like to include candle-lighting times for Shabbat and holidays, be sure to adjust the url parameter to include c=on and one of the location fields (such as geonameid=3448439 for São Paulo, Brazil).

We recommend some specific styles to make the page look prettier:

/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
html, body {
  margin: 0;
  padding: 0;
  font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
  font-size: 14px;
}
#calendar {
  max-width: 1000px;
  margin: 40px auto;
}
a:hover .fc-event-title {
  text-decoration: underline;
}
a:not([href]):hover .fc-event-title {
  text-decoration: none;
}
.fc-event {
    display: block; /* make the <a> tag block */
    font-size: .85em;
    line-height: 1.3;
    border-radius: 3px;
    color: #fff;
    border: 1px solid #3a87ad; /* default BORDER color */
    background-color: #3a87ad; /* default BACKGROUND color */
    margin: 1px 2px 0; /* spacing between events and edges */
    padding: 0 1px;
}
.fc-time {
  font-weight: bold;
}
.fc-event a {
    color: #fff;
}
.fc-event a:hover,
.fc-event a:focus {
    color: #fff;
}
.fc-event.hebdate, .fc-event.hebdate .fc-event-title,
.fc-event.omer, .fc-event.omer .fc-event-title {
  background-color:#FFF;
  border: 1px solid #FFF;
  color:#999;
}
.fc-event.dafyomi,
.fc-event.dafyomi a,
.fc-event.dafyomi .fc-event-title {
  background-color:#FFF;
  border: 1px solid #FFF;
  color:#08c;
}
.fc-event.dafyomi a:hover,
.fc-event.dafyomi a:focus {
    color: #005580;
}
.fc-event.mishnayomi,
.fc-event.mishnayomi a,
.fc-event.mishnayomi .fc-event-title {
  background-color:#FFF;
  border: 1px solid #FFF;
  color:#257e4a;
}
.fc-event.mishnayomi a:hover,
.fc-event.mishnayomi a:focus {
    color: #15713b;
}

.fc-event.holiday,
.fc-event.holiday .fc-event-title,
.fc-event.holiday.timed,
.fc-event.holiday.timed .fc-event-title {
  background-color:#3a87ad;
  border: 1px solid #3a87ad;
  color:#FFF;
}
.fc-event.fast {
  background-color:#fd7e14;
  border: 1px solid #fd7e14;
  color:#FFF;
}
.fc-event.timed,
.fc-event.timed .fc-event-title,
.fc-event.holiday.timed.fast,
.fc-event.holiday.timed.fast .fc-event-title {
  background-color:#FFF;
  border: 1px solid #FFF;
  color:#333;
}
.fc-event.holiday.yomtov,
.fc-event.holiday.yomtov a,
.fc-event.holiday.yomtov .fc-event-title {
  background-color:#ffd446;
  border: 1px solid #ffd446;
  color:#333;
}
.fc-event.parashat,
.fc-event.parashat .fc-event-title {
  background-color:#257e4a;
  border: 1px solid #257e4a;
  color:#FFF;
}
.fc-event.roshchodesh {
  background-color:#6f42c1;
  border: 1px solid #6f42c1;
  color:#FFF;
}
.fc-event.hebrew .fc-title {
  font-family:'SBL Hebrew',David;
  font-size:115%;
  font-weight:normal;
  direction:rtl;
}
.fc-event.hebrew .fc-time {
  direction:ltr;
  unicode-bidi: bidi-override;
}
.fc-event-time, .fc-event-title {
 padding: 0 1px;
 white-space: normal;
}
.fc .fc-event.fc-event-today .fc-event-title {
  background-color: rgba(255,220,40,0.15);
}

Hebrew Date Converter REST API

We offer a simple API for converting between Gregorian and Hebrew dates. Two output formats are supported: JSON and XML.

Note that this is a web API with the same functionality as the HDate 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.

1. Gregorian to Hebrew – single

To convert from Gregorian to Hebrew date use this URL format:

https://www.hebcal.com/converter?cfg=json&date=2011-06-02&g2h=1&strict=1
  • cfg=json – output format is JSON (cfg=json) or XML (cfg=xml)
  • g2h=1 – Convert from Gregorian to Hebrew date
  • date=2011-06-02 – Gregorian date in YYYY-MM-DD format
  • gs=on – After sunset on Gregorian date
  • strict=1 – strict mode will return a 400 Bad Request error for invalid dates

As an alternative to specifying date=YYYY-MM-DD, clients may send gy=YYYY&gm=MM&gd=DD as follows:

  • gy=2011 – Gregorian year
  • gm=6 – Gregorian month (1=January, 12=December). Leading 0 is optional
  • gd=2 – Gregorian day of month. Leading 0 is optional

2. Gregorian to Hebrew – range of dates

To convert a batch of Gregorian dates to Hebrew dates, use this URL format:

https://www.hebcal.com/converter?cfg=json&start=2021-12-29&end=2022-01-04&g2h=1
  • cfg=json – output format is JSON (cfg=json)
  • g2h=1 – Convert from Gregorian to Hebrew date
  • start=2021-12-29 – Gregorian start date in YYYY-MM-DD format
  • end=2022-01-04 – Gregorian end date in YYYY-MM-DD format

Results will be truncated to 180 days if the end date is more than 180 days after the start date.

3. Hebrew to Gregorian – single date

To convert from Hebrew to Gregorian use this URL format:

https://www.hebcal.com/converter?cfg=json&hy=5749&hm=Kislev&hd=25&h2g=1&strict=1
  • cfg=json – output format is JSON (cfg=json) or XML (cfg=xml)
  • h2g=1 – Convert from Hebrew to Gregorian date
  • hd=25 – Hebrew day of month
  • hy=5749 – Hebrew year
  • hm=Kislev – Hebrew month

Month names may be specified in Hebrew or transliterated as follows:

Month nameHebrewCommon aliases
Nisanניסן
IyyarאיירIyar
Sivanסיון
TamuzתמוזTammuz
Avאב
Elulאלול
Tishreiתשרי
Cheshvanחשון
Kislevכסלו
TevetטבתTeves
ShvatשבטSh'vat
Adarאדר
Adar1אדר א׳Adar 1Adar I
Adar2אדר ב׳Adar 2, Adar II

In leap years, specifying Adar is the same as specifying Adar2. In non-leap years, all three of Adar, Adar1, and Adar2 are considered equivalent and will be interpreted as Adar.

The API is somewhat lenient in what it accepts for Hebrew month names. You can specify sh%27vat or Sh%27vat or Shvat. It will always consistently generate Sh'vat in the response. Generally the API will accept month names with as few as 2 characters, as this is sufficient to disambiguate them from each other,.

Similarly, the API accepts all of Adar1Adar 1Adar IAdar2Adar 2Adar II. Because the capital-i and the lowercase-L look the same in some fonts, we recommend using the numerals 1 and 2 in the API usage. In the generated responses, Hebcal always uses Adar I and Adar II for consistency and compatibility as we’ve done for over 20 years.

4. Hebrew to Gregorian – range of dates

To convert a batch of Hebrew dates to Gregorian dates, use the same URL format as the “Hebrew to Gregorian – single date” above, and add an additional ndays parameter.

https://www.hebcal.com/converter?cfg=json&hy=5749&hm=Kislev&hd=25&h2g=1&ndays=90&strict=1
  • ndays=90 – calculate range of of days (between 2 and 180 inclusive)

5. Other API notes

By default, event titles use a Sephardic transliteration. Append &lg=LANG to the URL to render the events titles using an alternate event language.

Note also an optional callback parameter:

  • callback=function – wraps the JSON output text in parentheses and a function name of your choosing. Callback function names may only use upper and lowercase alphabetic characters (A-Z, a-z), numbers (0-9), the period (.), the underscore (_).

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

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.

6. Sample output in JSON and XML

{
  "gy": 2011,
  "gm": 6,
  "gd": 2,
  "afterSunset": false,
  "hy": 5771,
  "hm": "Iyyar",
  "hd": 29,
  "hebrew": "כ״ט בְּאִיָיר תשע״א",
  "heDateParts": {
    "y": "תשע״א",
    "m": "אייר",
    "d": "כ״ט"
  },
  "events": [
    "Parashat Nasso",
    "44th day of the Omer"
  ]
}
<?xml version="1.0" ?>
<hebcal>
  <gregorian year="2011" month="6" day="2" />
  <hebrew year="5771" month="Iyyar" day="29" str="כ״ט בְּאִיָיר תשע״א" />
</hebcal>

7. Sample output (batch API)

{
  "start": "2021-12-29",
  "end": "2022-01-04",
  "locale": "en",
  "hdates": {
    "2021-12-29": {
      "hy": 5782,
      "hm": "Tevet",
      "hd": 25,
      "hebrew": "כ״ה בְּטֵבֵת תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "טבת",
        "d": "כ״ה"
      },
      "events": [
        "Parashat Vaera"
      ]
    },
    "2021-12-30": {
      "hy": 5782,
      "hm": "Tevet",
      "hd": 26,
      "hebrew": "כ״ו בְּטֵבֵת תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "טבת",
        "d": "כ״ו"
      },
      "events": [
        "Parashat Vaera"
      ]
    },
    "2021-12-31": {
      "hy": 5782,
      "hm": "Tevet",
      "hd": 27,
      "hebrew": "כ״ז בְּטֵבֵת תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "טבת",
        "d": "כ״ז"
      },
      "events": [
        "Parashat Vaera"
      ]
    },
    "2022-01-01": {
      "hy": 5782,
      "hm": "Tevet",
      "hd": 28,
      "hebrew": "כ״ח בְּטֵבֵת תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "טבת",
        "d": "כ״ח"
      },
      "events": [
        "Shabbat Mevarchim Chodesh Sh'vat",
        "Parashat Vaera"
      ]
    },
    "2022-01-02": {
      "hy": 5782,
      "hm": "Tevet",
      "hd": 29,
      "hebrew": "כ״ט בְּטֵבֵת תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "טבת",
        "d": "כ״ט"
      },
      "events": [
        "Parashat Bo"
      ]
    },
    "2022-01-03": {
      "hy": 5782,
      "hm": "Sh'vat",
      "hd": 1,
      "hebrew": "א׳ בִּשְׁבָט תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "שבט",
        "d": "א׳"
      },
      "events": [
        "Rosh Chodesh Sh'vat",
        "Parashat Bo"
      ]
    },
    "2022-01-04": {
      "hy": 5782,
      "hm": "Sh'vat",
      "hd": 2,
      "hebrew": "ב׳ בִּשְׁבָט תשפ״ב",
      "heDateParts": {
        "y": "תשפ״ב",
        "m": "שבט",
        "d": "ב׳"
      },
      "events": [
        "Parashat Bo"
      ]
    }
  }
}

Displaying a Jewish Calendar on your website

Note: as of 2020, we recommend newer FullCalendar approach. These instructions are here for historical purposes.

You may use the HTML tags below, courtesy of Kevin Ilsen’ JavaScript Event Calendar to put a calendar on your website. See an example of what the event calendar looks like.

If you just want holidays and no candle-lighting times, put these tags in the <head> section of the page:

Then, somewhere in the <body> section of the page where you want the calendar to appear, use these tags:

To add candle-lighting times for your city or town, you can change lines 1 and 2 in the first code block above as follows to include a zip code.

Be sure to change 90210 to your shul’s zip code. For example,

Note the following customizable parameters and their meanings:

  • nh=on – major holidays
  • nx=on – Rosh Chodesh
  • mf=on – minor fasts
  • ss=on – special Shabbatot
  • s=on– Parashat ha-Shavuah on Saturday
    • i=off – Diaspora sedra scheme
    • i=on – Israel sedra scheme
  • c=on – candle lighting times
  • zip=90210 – use zip code 90210 for candle lighting times
  • m=72 – Havdalah 72 minutes after sundown. Set to m=0 (zero) to disable Havdalah times
  • D=on – Hebrew date for dates with some event
  • d=on – Hebrew date for entire date range
  • o=on – Days of the Omer

Note mutually exclusive language parameter:

  • lg=s – Sephardic transliterations
  • lg=sh – Sephardic translit. + Hebrew
  • lg=a – Ashkenazis transliterations
  • lg=ah – Ashkenazis translit. + Hebrew
  • lg=h – Hebrew only