Panjika tradition, Surya-Siddhanta astronomy, and a verified open implementation
The Assamese calendar (অসমীয়া বৰ্ষপঞ্জী) is a sidereal solar calendar: its twelve months are the Sun's stays in the twelve fixed zodiac signs, computed by the classical Surya Siddhanta. On top of that solar frame sits a lunisolar layer of tithis and lunar months, which is what actually fixes Bihu, Durga Puja, Bohag and every other festival date. This paper sets out the whole derivation — the tradition, the astronomy, the mathematics and the verification — so that it can be reproduced from first principles by anyone, in any century, without a printed almanac.
A panjika (পঞ্জিকা) is an almanac: a year-by-year table of the Sun's and Moon's positions, from which the dates of months, tithis and festivals are read. In Assam and Bengal the panjika has been a printed household object for well over a century, and the compilers' calculation rules — not any government body — are what most people actually follow.
Two schools divide the tradition. The older Surya-Siddhantic (or odrik) school computes planetary positions from the classical Sanskrit siddhantas, using constants fixed more than a thousand years ago. The reforming drik-siddhantic school, which in Bengal dates from the Vishuddha Siddhanta Panjika of 1890, computes them from modern observational astronomy. Both are internally consistent; they simply answer a slightly different question, and their festival dates can fall a day apart.
India's Calendar Reform Committee (1952–55), chaired by the astrophysicist Meghnad Saha, found the country using some thirty different systems for dating the same festivals, and noted that rival almanac houses in a single city routinely published different dates for the same observance. It recommended a modern-ephemeris basis for religious calculation and a tropical national civil calendar. The civil calendar was never widely adopted, and a great many traditional panjikas — Assam's among them — kept the Surya-Siddhantic reckoning they had always used.
Panchanga means "five limbs". Every Indian almanac is built from the same five quantities, and all five are
simple functions of just two numbers: the sidereal longitude of the Sun (λ☉) and of the Moon (λ☾). Writing the
elongation E = (λ☾ − λ☉) mod 360°:
| Limb | What it is | Definition | Count |
|---|---|---|---|
| Tithi তিথি | lunar day | each 12° of elongation: t = ⌊E/12°⌋ + 1 | 30 per lunation |
| Vara বাৰ | weekday | day-count modulo 7, reckoned sunrise to sunrise | 7 |
| Nakshatra নক্ষত্ৰ | lunar mansion | each 13°20′ of the Moon's longitude | 27 |
| Yoga যোগ | sum-angle | each 13°20′ of (λ☉ + λ☾) | 27 |
| Karana কৰণ | half-tithi | each 6° of elongation | 60 per lunation |
A tithi is not a day. Its mean length is one thirtieth of a synodic month — 0.98435 days, about 23 hours 37 minutes — but because the Moon's speed varies, an actual tithi runs anywhere from roughly 20 to 27 hours. The civil day takes the name of whichever tithi is running at sunrise. A tithi short enough to begin and end between two sunrises is skipped entirely (kshaya); one long enough to span two sunrises is counted twice (adhika). This is the single most common reason a calendar date "jumps".
The Surya Siddhanta is the astronomical treatise underlying most traditional Indian calendars. The text that survives is a revised one — scholars variously date the extant recension to roughly the 4th, 8th or 10th century CE, and Varahamihira (c. 505 CE) already summarises an older version with slightly different constants. It was translated into English by Ebenezer Burgess in 1860, with notes by W. D. Whitney, and that translation remains the standard reference.
Its power lies in a handful of integers. The text fixes the number of revolutions each body completes in a mahayuga of 4,320,000 years, alongside the number of civil days in that period. Every position, for any date past or future, follows from these by arithmetic alone:
| Quantity per mahayuga | Value |
|---|---|
| Civil (savana) days | 1,577,917,828 |
| Solar revolutions | 4,320,000 |
| Lunar sidereal revolutions | 57,753,336 |
| Revolutions of the Moon's apogee | 488,203 |
| Synodic months | 53,433,336 |
| Intercalary (adhika) months | 1,593,336 |
These few integers already imply the lengths of the year and the month:
Compare the modern values: the sidereal month is 27.321661 days and the synodic month 29.530589 days. The Surya Siddhanta's synodic month is accurate to about one part in thirty million — a tenth of a second per lunation. Its sidereal year, however, is about 3.4 minutes too long, and that small excess is the origin of the slow drift discussed in §11.
All counting starts from the epoch of Kali Yuga, conventionally midnight at Ujjain on 18 February 3102 BCE (Julian calendar) — Julian Day 588,465.5. The elapsed-day count from that epoch is the ahargana, and it is the pivot of every calculation that follows.
Because revolutions are uniform in the model, mean longitude is a proportion. With A the ahargana,
R the revolutions per mahayuga and C = 1,577,917,828:
This gives mean daily motions of 0.985603°/day for the Sun and 13.176350°/day for the Moon.
A body moving on a circle at constant speed is not what we see: real orbits are elliptical, so a body runs ahead of
its mean position in one half of the orbit and behind in the other. The siddhantas correct for this with an
epicycle of circumference p degrees, measured from the apogee (mandocca). With anomaly
κ = λ̄ − λ_apogee:
The Surya Siddhanta gives the Sun an epicycle of about 13°40′–14° and the Moon about 31°40′–32°. For the Sun this produces a maximum correction of 2°10′ — against a true modern maximum of about 1°55′. That overestimate of roughly a fifth of a degree is equivalent to about five hours of solar motion, and it is why a Surya-Siddhantic sankranti falls some hours away from a modern one.
Historically the sine itself came from a table: 24 tabulated values at intervals of 3°45′ on a radius of
R = 3438 (the number of arcminutes in a radian), beginning 225, 449, 671, 890… and ending at 3438. The
table is generated by a recurrence that is, in effect, the discrete form of the differential equation
d²(sin)/dθ² = −sin — a remarkable thing to find in a text of this age. A modern implementation may use
a machine sine instead; the difference is far below the resolution of a calendar.
The Sun's motion is simple enough that classical theory handles it well. The Moon's is not. Modern lunar theory needs several periodic terms where the classical model has only one:
| Term | Amplitude | In Surya Siddhanta? |
|---|---|---|
| Equation of centre | 6.29° | Yes — the manda correction |
| Evection | 1.27° | No |
| Variation | 0.66° | No |
| Annual equation | 0.19° | No |
There is an elegance hidden in that omission. At new moon and full moon, evection subtracts from the equation of centre: 6.29° − 1.27° ≈ 5.02°. The Surya Siddhanta's lunar epicycle of 31°40′ yields a maximum correction of 5.05°. In other words the classical lunar constant was effectively fitted to the syzygies — the configurations that matter for eclipses and for the new and full moons that anchor the lunar month. Near new and full moon the classical Moon is very good indeed. At the quarters, where evection instead adds, the error grows to a couple of degrees.
An Assamese month is the interval during which the Sun occupies one sidereal zodiac sign. The instant it crosses from one sign to the next is the sankranti (সংক্ৰান্তি), and that instant — not any fixed rule of thumb — defines the month boundary.
| # | Month | Rashi (sign) | Usually begins | Typical length |
|---|---|---|---|---|
| 1 | বহাগ Bohag | Mesha | 14–15 April | 31 |
| 2 | জেঠ Jeth | Vrisha | 15 May | 31–32 |
| 3 | আহাৰ Ahar | Mithuna | 15 June | 31–32 |
| 4 | শাওণ Xaon | Karkata | 16–17 July | 31–32 |
| 5 | ভাদ Bhado | Simha | 17 August | 31 |
| 6 | আহিন Ahin | Kanya | 17–19 September | 30–31 |
| 7 | কাতি Kati | Tula | 18–19 October | 30 |
| 8 | আঘোণ Aghon | Vrishchika | 17 November | 29–30 |
| 9 | পুহ Puh | Dhanu | 16 December | 29 |
| 10 | মাঘ Magh | Makara | 14–16 January | 29–30 |
| 11 | ফাগুন Fagun | Kumbha | 13 February | 30 |
| 12 | চ'ত Sot | Meena | 15 March | 30–31 |
The months are unequal because the Earth's orbit is an ellipse. By Kepler's second law the Sun appears to move fastest when the Earth is near perihelion in early January and slowest near aphelion in early July. A 30° sign is therefore crossed in about 29.4 days in Puh and about 31.6 days in Ahar. Month lengths of 29 to 32 days are normal, and they are not the same every year.
Regional traditions differ on which civil day the sankranti belongs to. In Tamil usage a sankranti before sunset begins the month that same day; in Kerala the cut-off is early afternoon; in Odisha the month begins on the sankranti day itself. The Bengal–Assam tradition pushes the start to the following day, with a further rule for sankrantis falling between midnight and sunrise.
The Indian civil day runs from sunrise to sunrise, and the tithi, the weekday and the month boundary are all evaluated at local sunrise. That makes the reference place part of the calendar's definition, not an implementation detail. This calendar uses Jorhat (26.75° N, 94.22° E) as its reference meridian, the traditional centre of Upper Assam almanac production.
Jorhat lies 11.7° east of the 82.5° E meridian on which Indian Standard Time is based, so the Sun rises there about 47 minutes earlier than IST would suggest. Moving the reference to Guwahati would shift sunrise by roughly ten minutes — enough, in a boundary case, to move a date. Sunrise itself is computed from standard solar-position formulae, taking the upper limb of the Sun with atmospheric refraction at an altitude of −0°50′:
where φ is latitude, δ the Sun's declination and h₀ = −0.833°. Indian almanac editors differ here too: some advocate the centre of the solar disc with no refraction, which moves sunrise by three or four minutes at this latitude.
An Assamese panjika carries several year-counts at once. Each has its own epoch and its own moment of rollover, and they are not interchangeable.
| Era | Epoch | Commemorates | Rolls over at |
|---|---|---|---|
| Bhaskarabda ভাস্কৰাব্দ | 593/594 CE | the accession of Bhaskaravarman, king of Kamarupa | Bohag (Assamese New Year) |
| Shakabda শক | 78 CE | the pan-Indian Shaka era; India's national era | Bohag, in Assamese usage |
| Shankarabda শংকৰাব্দ | 1449 CE | the birth of Srimanta Sankardev | his birth month (Ahin–Kati) |
| Gregorian | 1 CE | civil / international use | 1 January |
Bhaskarabda is Assam's own era, added to the Government of Assam's official calendar in October 2021 alongside the Shaka and Gregorian years. Official usage — state holiday lists, public utilities, and the Chief Minister's own New Year statements — increments it at Bohag: 1 Bohag 1433 fell on 15 April 2026, and 1 January 2024 was 15 Puh 1430. This calendar reproduces both of those reference dates exactly. Historians disagree about the underlying chronology: the 593/594 CE epoch is also associated with Shashanka of Gauda, and whether Bhaskaravarman's accession truly falls there is contested, with several authorities placing his reign around 600–650 CE.
Shankarabda counts from the traditionally accepted birth year of Srimanta Sankardev, 1449 CE, and rolls over in his birth month rather than at the new year — which is why, for part of the year, the gap between Shankarabda and Bhaskarabda is not constant. Here too the chronology is debated: the earliest biographies record only Sankardev's death, in 1568, and some scholars argue for a birth in the 1480s.
The civil calendar is solar; the festival calendar is lunar. The two are stitched together by a naming rule.
A lunation divides into two fortnights: shukla paksha (waxing, tithis 1–15, ending at Purnima) and krishna paksha (waning, tithis 16–30 in continuous numbering, ending at Amavasya). Tithi 15 is the full moon; tithi 30 is the new moon. Ekadashi — the eleventh tithi of each fortnight — falls at elongation counts 11 and 26.
In the amanta scheme used across Assam and Bengal, a lunar month runs from one new moon to the next, and it takes its name from the solar sign the Sun enters during that lunation. The lunation containing the Mesha sankranti is Vaishakha, the one containing the Kanya sankranti is Ashvina, and so on.
Twelve lunations fall about eleven days short of a solar year, so the lunar and solar frames must periodically be re-synchronised. The rule is elegant and purely observational:
Because a lunation (29.53 days) is slightly shorter than the shortest solar month (29.4 days), such a lunation is possible but uncommon: on average one occurs every 32.5 months — seven in nineteen years, the same Metonic ratio that governs leap months in other lunisolar calendars. An adhika month carries no festivals; the observances fall in the following, "true" month. Much more rarely, a lunation can contain two sankrantis, producing a suppressed month (kshaya masa) — a phenomenon confined to the Aghon–Magh stretch and separated by gaps of 19 to 141 years.
Knowing the tithi is not enough to date a festival. Each observance specifies which part of the day the required tithi must occupy. These windows are codified in the dharmashastra digests — in Bengal and Assam, chiefly Raghunandana's sixteenth-century tattvas.
| Rule | Window | Governs |
|---|---|---|
| udaya-vyapini | at sunrise | most vratas; the day's tithi name |
| madhyahna | midday | Ganesh Chaturthi |
| aparahna | afternoon | Mahalaya and shraddha; Vijaya Dashami |
| pradosha | dusk | Lakshmi Puja, Diwali |
| nishitha | midnight | Janmashtami; Kali Puja in Bengal |
If a tithi occupies the required window on two consecutive days, or on neither, further tie-breaking rules apply — conventionally the earlier day is taken. This is a second, entirely independent source of one-day differences between almanacs, quite apart from any disagreement about astronomy.
Assam's defining festivals are tied to the solar frame, which is why they recur on nearly the same Gregorian date each year:
The lunar festivals — Durga Puja, Doul, Janmashtami, Shivaratri, Kali Puja, Ras — move across the Gregorian year because they follow the lunar overlay of §9 and the observance windows above.
The Indian calendar is nirayana (sidereal): it measures longitude from a fixed point among the stars, not from the moving equinox. Because the Earth's axis precesses — about 50.3 arcseconds a year, one degree in 72 years, a full circuit in roughly 25,800 years — a sidereal calendar slowly drifts relative to the seasons. The angular gap between the tropical and sidereal zero points is the ayanamsa, currently about 24°.
This is why Mesha Sankranti, which once coincided with the spring equinox, now falls around 14 April; and why Makara Sankranti, nominally the turn toward the northern course, now falls about 24 days after the actual December solstice. Bohag Bihu and Magh Bihu drift with them.
Surya-Siddhantic reckoning adds a second, smaller drift of its own. Because its sidereal year is about 3.4 minutes too long, it slips roughly one day every sixty years against the seasons, and gradually against modern sidereal positions too. Over the span a living calendar is used this is imperceptible; over centuries it is the main reason traditional and drik almanacs diverge.
The Surya Siddhanta itself does not describe unbounded precession but trepidation — a libration of the equinox through ±27° — which Burgess read as a 7,200-year cycle. The Calendar Reform Committee instead fixed a modern sidereal origin, the Chitrapaksha or Lahiri ayanamsa, at 23°15′ on 21 March 1956; that is the value used by drik almanacs today.
Everything above is implemented, openly and in full, in the calendar at oxomiacalendar.in. It is worth stating what kind of program it is, because it differs from almost every other calendar tool.
There are no lookup tables. The page stores no list of month starts, no table of tithis, no festival dates. It computes the Sun's and Moon's positions from the Surya-Siddhantic constants at the moment you load it. That is why it works for any year — 1800 or 2200 — and why it can never go stale or require an annual update. It is also why the whole calendar, engine and interface together, is a single file of a few tens of kilobytes that runs entirely in your browser with no server and no network.
⌊E/12°⌋ + 1 evaluated at sunrise.So that anyone may reproduce or audit the result, the engine's parameters are these:
A traditional calendar can only be validated against the tradition. The engine's solar output was therefore checked day by day against a printed Assamese panjika's month-start table across 1950–2100 — 73,204 days, about 1,812 month boundaries.
| Check | Result |
|---|---|
| Solar longitude, RMS against the reference | ≈ 3 arcseconds (≈ 1.2 minutes of time) |
| Month boundaries, 1950–2100 | essentially all reproduced; the few differences trace to sankrantis falling within about two minutes of sunrise |
| Era years | reproduced exactly across the range |
| Range | unbounded — verified to resolve correctly for 1820 and 2195 |
Three arcseconds is roughly a minute of time in the Sun's position. When a sankranti falls within a minute or two of sunrise, no amount of precision settles which civil day it belongs to — the answer depends on the almanac's own definition of sunrise, and on its reference meridian. Those are the residual cases.
Intellectual honesty requires naming what is not settled. Three points remain under review and will be revised here as evidence accumulates:
If you maintain a panjika, or hold older printed editions, and can check a date against this calendar, that contribution would be welcomed. A calendar tradition survives by being tested.