How It Works

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.

#EnglishOl ChikiDaysGregorian Range
0Magᱢᱟᱜᱽ29/30Jan – Feb
1Fagunᱯᱷᱟᱹᱜᱩᱱ29/30Feb – Mar
2Chaatᱪᱟᱹᱛ29/30Mar – Apr
3Baisakᱵᱟᱭᱥᱟᱠ29/30Apr – May
4Jhentᱡᱷᱮᱸᱴ29/30May – Jun
5Ashalᱟᱥᱟᱲ29/30Jun – Jul
6Saanᱥᱟᱱ29/30Jul – Aug
7Bhadorᱵᱷᱟᱫᱚᱨ29/30Aug – Sep
8Dasainᱫᱟᱥᱟᱸᱭ29/30Sep – Oct
9Sohrayᱥᱚᱦᱨᱟᱭ29/30Oct – Nov
10Aaghanᱟᱜᱷᱟᱬ29/30Nov – Dec
11Pusᱯᱩᱥ29/30Dec – Jan
12*Sarcha Chandoᱥᱟᱨᱪᱟ ᱪᱟᱸᱫᱚ30 daysLeap 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.

PropertyValue
Cycle length19 years
Leap years per cycle7
Leap positions1, 4, 7, 9, 12, 15, 18
Anchor year2026
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);
}
CycleLeap Years
2007–20252007, 2010, 2013, 2015, 2018, 2021, 2024
2026–20442026, 2029, 2032, 2034, 2037, 2040, 2043
2045–20632045, 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.

Cutoff: 17:00 IST (5:00 PM)
Before: Month starts same day
After: Month starts next day

The 17:00 cutoff accounts for winter sunsets in Eastern India (5:05–5:15 PM), ensuring correct behavior year-round.