Astronomy & Mathematics

Calculation Guide

The astronomical logic behind the Santali lunar calendar — how leap years are calculated and why the 19-year Metonic cycle was chosen.

1The Core Problem: Solar vs. Lunar Years

The Santali calendar is a lunisolar calendar — it tracks both moon phases (for months) and the solar year (for seasons).

UnitDuration
1 Solar Year (Tropical)365.24219 days
1 Lunar Month (Synodic)29.53059 days
1 Lunar Year (12 months)354.36708 days
Annual Deficit10.87511 days (~11 days)

Every year the lunar calendar falls behind the solar calendar by approximately 11 days. If left uncorrected, the calendar would drift completely out of sync with the seasons — Magh would eventually fall in summer.

2The Simple 3-Year Rule (And Why It Fails)

To fix the 11-day deficit, most traditional rules add an extra month every 3 years. The math for 3 years:

  • Accumulated drift in 3 years: 10.87511 × 3 = 32.62533 days
  • Length of 1 leap month: 29.53059 days
  • Remaining unadjusted drift: 3.09474 days

The 3-Day Problem

Even after adding a leap month, there is a residual drift of ~3.1 days every 3 years. In 18 years = ~18 days of error. In 114 years = ~117 days of error.

3The Metonic Cycle Solution (The 7th Month)

In 432 BCE, the Greek astronomer Meton discovered a near-perfect mathematical alignment:

19 Solar Years ≈ 235 Lunar Months

  • 19 Solar Years = 19 × 365.24219 = 6939.6016 days
  • 235 Lunar Months = 235 × 29.53059 = 6939.6886 days
  • Difference = 0.087 days (only ~2.1 hours of drift per 19 years!)

Instead of adding exactly 6 leap months in 18 years, we must add 7 leap months in 19 years. The accumulated 3-day residuals from each cycle add up to form this 7th leap month, completely wiping out the drift.

4Spacing the 7 Leap Years (The Gap Sequence)

If we have to place 7 leap years within a 19-year window, the 19 years must be divided into a combination of 3-year and 2-year gaps:

3 + 3 + 2 + 3 + 3 + 3 + 2 = 19 years

This creates the specific leap positions within the 19-year cycle:

const METONIC_LEAP_POS = new Set([1, 4, 7, 9, 12, 15, 18]);
PositionGap from PreviousLeap Year?
1— Yes
21 yearNo
31 yearNo
43 years Yes
51 yearNo
61 yearNo
73 years Yes
81 yearNo
92 years Yes
101 yearNo
111 yearNo
123 years Yes
131 yearNo
141 yearNo
153 years Yes
161 yearNo
171 yearNo
183 years Yes
191 yearNo

You cannot have a leap year just 1 year after the previous leap year. A single year only generates 11 days of drift, which is not enough to form a 30-day month. The 2-year gap at position 9 prevents this.

5The "Extra Days Bank Account" Analogy

Think of the calendar as a bank account:

  • Earning: Every solar year, ~11 extra days are deposited
  • Spending: When the balance exceeds 30 days, withdraw 30 days for a leap month
YearRunning BalanceLeap Month?After Withdrawal
202411No11
202522No22
202633Yes3
202714No14
202825No25
202936Yes6
203017No17
203128No28
203239Yes9
203320No20
203431Yes (2-yr gap)1
203512No12
203623No23
203734Yes4
203815No15
203926No26
204037Yes7
204118No18
204229No29
204340Yes10
204421No21
204532Yes — new cycle~0

By the end of exactly 19 years, the fractional math perfectly balances out and the bank balance hits approximately 0, completely resetting the cycle.

6Implementation in the Library

The cycle is anchored to 2026 (a known leap year) for historical compatibility.

const METONIC_CYCLE_START  = 2026;
const METONIC_LEAP_POS     = new Set([1, 4, 7, 9, 12, 15, 18]);
const YEAR_ANCHOR_DATE     = "2026-01-19T00:00:00.000Z";

function isLeapYear(y) {
  const pos = (((y - METONIC_CYCLE_START) % 19 + 19) % 19) + 1;
  return METONIC_LEAP_POS.has(pos);
}

Resulting leap years: 2026, 2029, 2032, 2034, 2037, 2040, 2043, 2045...

This logic has been stress-tested across a 10,001-year span (2023 to 12023) with zero critical errors.

7Why Sarcha Chando Is Added After Pus Bonga

The 13th month (Sarcha Chando) is always inserted after Pus Bonga (the 12th month) and before Magh Bonga because:

  • New Year Anchor: The traditional Santali new year begins with Magh Bonga
  • Preventing Seasonal Drift: The extra 30-day month pushes the upcoming Magh Bonga forward, returning it to its correct seasonal window (late January / early February)
  • Agricultural Idle Time: Pus falls during Dec–Jan when major agricultural work has concluded and the community is free from major festivals

“ᱡᱮᱛᱮ ᱪᱟᱸᱫᱚ ᱱᱟᱯᱟᱭ ᱛᱮᱜᱮ ᱪᱟᱞᱟᱜ, ᱯᱩᱥ ᱟᱨ ᱢᱟᱜᱽ ᱜᱮ ᱠᱤᱱ ᱨᱮᱯᱮᱡ ᱵᱟᱲᱟᱜ᱾”

“All months pass smoothly, but it is only Pus and Magh that quarrel with each other.” — Guru Gomkey Pt. Raghunath Murmu, Parsi Poha

8Continuous Metonic Chain

The engine does not rely on Gregorian boundaries (January/February) to find Magh. Instead it uses a Continuous Metonic Chain:

  1. Starts from a fixed anchor (Magh 2023)
  2. Counts the exact number of elapsed lunar months since that anchor (12 or 13 per year based on the Metonic cycle position)
  3. Steps forward through the New Moon chain by that exact index

This allows Magh to float naturally — sometimes starting in January, sometimes in February after a leap year pushes it late. The months form an unbroken, perfectly aligned continuous chain without ever overlapping or requiring manual correction.

9Base Year & Chandradarshan

The Santali month does not begin at the exact astronomical New Moon (Amavasya). It begins at Chandradarshan (Muluq Etohob) — the first visible sighting of the waxing crescent moon after sunset.

Cutoff Time: 17:00 IST (5:00 PM)
Rule 1: New Moon before 17:00 IST → month starts same day
Rule 2: New Moon after 17:00 IST → month starts next day

Why 17:00 and not 18:00? In Eastern India (Jharkhand, Bengal, Odisha), winter sunsets occur between 5:05 PM and 5:15 PM. A 6:00 PM cutoff would incorrectly treat a New Moon at 5:45 PM as “before cutoff” when the sun has already set. 5:00 PM is the scientifically sound safe limit.

The engine uses the Jean Meeus Astronomical Algorithms with the J2000.0 epoch (January 6, 2000 at 18:14:00 UTC) — the internationally recognized standard used by NASA and JPL.