Calendar System
How the Santali lunisolar calendar maps onto the Gregorian calendar with astronomical precision.
Overview
The Santali calendar is a lunisolar system that tracks both moon phases (for months) and the solar year (for seasons). It is not a purely lunar calendar — months have fixed lengths (29 or 30 days), and a 19-year Metonic cycle keeps the calendar aligned with solar seasons.
Santali Months
The calendar has 12 base months. In leap years, a 13th month (Sarcha) is added after Pus.
| # | English | Ol Chiki | Days | Gregorian Range |
|---|---|---|---|---|
| 0 | Mag | ᱢᱟᱜᱽ | 29/30 | Jan – Feb |
| 1 | Fagun | ᱯᱷᱟᱹᱜᱩᱱ | 29/30 | Feb – Mar |
| 2 | Chaat | ᱪᱟᱹᱛ | 29/30 | Mar – Apr |
| 3 | Baisak | ᱵᱟᱭᱥᱟᱠ | 29/30 | Apr – May |
| 4 | Jhent | ᱡᱷᱮᱸᱴ | 29/30 | May – Jun |
| 5 | Ashal | ᱟᱥᱟᱲ | 29/30 | Jun – Jul |
| 6 | Saan | ᱥᱟᱱ | 29/30 | Jul – Aug |
| 7 | Bhador | ᱵᱷᱟᱫᱚᱨ | 29/30 | Aug – Sep |
| 8 | Dasain | ᱫᱟᱥᱟᱸᱭ | 29/30 | Sep – Oct |
| 9 | Sohray | ᱥᱚᱦᱨᱟᱭ | 29/30 | Oct – Nov |
| 10 | Aaghan | ᱟᱜᱷᱟᱬ | 29/30 | Nov – Dec |
| 11 | Pus | ᱯᱩᱥ | 29/30 | Dec – Jan |
| 12* | Sarcha Chando | ᱥᱟᱨᱪᱟ ᱪᱟᱸᱫᱚ | 30 days | Leap year only |
* Index 12 only exists in leap years. Months alternate between 29 and 30 days, with Pus and Sarcha Chando always having 30 days.
Year Structure
354
Normal Year (12 months)
6 × 30 + 6 × 29
384
Leap Year (13 months)
354 + 30 (Sarcha)
A Santali year does not align with January 1. The year starts with Magh Bonga, which typically falls in late January or early February.
Gregorian Date Mapping
A Santali month is not equivalent to a Gregorian month. A single Santali month can span parts of two Gregorian months.
Example: Magh 2026
Starts: January 19, 2026 (Monday)
Ends: February 17, 2026 (Tuesday)
Duration: 30 days
The year start date is computed by iterating from the anchor (2026-01-19), adding 354 or 384 days per year. This means each year's start date is calculated independently — no fixed offset.
Metonic Cycle
The 19-year Metonic cycle ensures the calendar stays aligned with solar seasons. 7 out of every 19 years are leap years.
| Property | Value |
|---|---|
| Cycle length | 19 years |
| Leap years per cycle | 7 |
| Leap positions | 1, 4, 7, 9, 12, 15, 18 |
| Anchor year | 2026 |
| Drift per cycle | ~2.1 hours |
See the Calculation Guide for the full mathematical explanation.
Leap Years
The library determines leap years using a simple modulo operation:
const METONIC_CYCLE_START = 2026;
const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
function isLeapYear(y) {
const pos = (((y - 2026) % 19 + 19) % 19) + 1;
return METONIC_LEAP_POS.has(pos);
}| Cycle | Leap Years |
|---|---|
| 2007–2025 | 2007, 2010, 2013, 2015, 2018, 2021, 2024 |
| 2026–2044 | 2026, 2029, 2032, 2034, 2037, 2040, 2043 |
| 2045–2063 | 2045, 2048, 2051, 2053, 2056, 2059, 2062 |
Calendar Grid Structure
Each month is rendered as a column-major grid organized by weekday (Sunday-first). Days from adjacent months appear as overflow cells with isCurrentMonth: false.
// SantaliCalendarYear structure
{
year: 2026,
isLeapYear: true,
startDate: Date("2026-01-19"),
endDate: Date("2027-01-07"),
currentMonthIndex: 0,
months: [
{
name: "Mag",
english: "Mag",
olChiki: "ᱢᱟᱜᱽ",
days: 30,
startDate: Date("2026-01-19"),
endDate: Date("2026-02-17"),
dayCells: [
null, null, null, null, null, null, null, // Sun padding
{ day: 1, date: "2026-01-19", olchiki: "᱑", isToday: false, isCurrentMonth: true, ... },
{ day: 2, date: "2026-01-20", olchiki: "᱒", isToday: false, isCurrentMonth: true, ... },
// ... 30 day cells total
]
},
// ... 12 or 13 months
]
}All seven weekday arrays have the same length, making it straightforward to render in any UI framework.
Chandradarshan (Crescent Moon Sighting)
The Santali month begins at Chandradarshan — the first visible sighting of the waxing crescent moon after sunset — not at the exact astronomical New Moon.
The 17:00 cutoff accounts for winter sunsets in Eastern India (5:05–5:15 PM), ensuring correct behavior year-round.