A simple rule for sidereal months and seasons
Due to precession of the equinoxes, it’s observed that the month of Vaisakha (nirayana i.e. sidereal) today does not occur in the spring season (vasanta ṛtu) at all. Vaiṡākha is squarely in the summer season (May) most of the time. How to know when and which lunar month maps to which season?
I derive the following simple rule:
Let’s call the span of sixty years, from Prabhava, Vibhava, …, Kṣaya samvatsaras as one “cycle”. The spring season must be shifted by 1 month earlier every 36 such cycles (36 x 60 Jovian samvatsaras = 2160 years). The most recent shift is reckonened from Prabhava samvatsara of Gregorian year +247, from which spring season (vasanta ṛtu) is mapped to Phālguna-Caitra months. From the Prabhava samvatsara after 36 cycles, i.e. Gregorian year +2407, spring season is mapped to Māgha-Phālguna months.
The advantage of the above rule of thumb is that it does not depend on any ayanāṃṡa. It holds true for Lāhiri, Citra-pakṣa, Rēvatī-pakṣa, etc. ayanamshas.
| Years | Offset | Vasanta = |
|---|---|---|
| −6233 to -4072 | -2 | Jyēṣṭha-Āṣāḍha |
| −4073 to -1912 | -1 | Vaiṡākha-Jyēṣṭha |
| −1913 to 246 | 0 | Caitra–Vaiṡākha |
| 247 to 2406 | +1 | Phālguna–Caitra |
| 2407 to 4566 | +2 | Māgha–Phālguna |
| 4567 to 6726 | +3 | Pauṣa–Māgha |
Right now, it’s 2026, so we must reckon Phālguna-Caitra months as Vasanta ṛtu, Vaiṡākha-Jyēṣṭha months as Grīṣma ṛtu, etc.
Rationale
The drik ṛtus are fixed to the following dates of Gregorian calendar, in northern hemisphere:
| Season | Zodiac signs | Dates |
|---|---|---|
| Vasanta | Pisces and Aries | Feb 19 - Apr 19 |
| Grīṣma | Taurus and Gemini | Apr 20 - Jun 20 |
| Varṣa | Cancer and Leo | Jun 21 - Aug 22 |
| Sharad | Virgo and Libra | Aug 23 - Oct 22 |
| Hēmanta | Scorpio and Sagittarius | Oct 23 - Dec 21 |
| Ṡiṡira | Capricorn and Aquarius | Dec 22 - Feb 18 |
This mapping was true 5000 years ago, and holds true 5000 years from now, because these dates are tropical by definition. Notice that Vasanta starts on Feb 19 every year.
The seasons are drifting continuously, every year, but we want to discretise it. Consider the annual rate of precession to be 50 arc-seconds per year (the modern value is ~50.25”). It means that the tropical and sidereal zodiacs will coincide once every (360° * 60’ * 60”) / 50” = 25920 years. The exact year of coincidence determines the ayanamshas and does not matter for us. Splitting 25920 into twelve equal parts (12 month names) gives 25920 / 12 = 2160 years. 2160 is a very composite number. It neatly factors as 36 x 60 and hence provides a nice whole number as “36 cycles of the sixty-year Jovian period”.
By trial and error, we notice that the last time Feb 19 was in Caitra month was year +193 (i.e. 19 Feb +193 = Caitra-S1, Srimukha samvatsara). The next cycle, with Prabhava samvatsara starts from the year +247. After year +248, Feb 19 never falls in Caitra. On any year after +248, date of 19 Feb always occurs in sidereal Phalguna month (ignoring adhika Caitra masa).
Similarly, after year +2407, Feb 19 never occurs in the month of Phālguna. So we can say that vasanta ṛtu begins in the month of Māgha from then on. Going backwards, after -1913, the beginning of vasanta ṛtu (Feb 19) never occurs in the month of Vaiṡākha, so we know that the shift of seasons is complete.
The years -1913, +247, +2407, etc. are convenient anchor points chosen because they all are Prabhava samvatsaras, so a new Jovian cycle begins from then on. This is guaranteed because 2160 is a multiple of 60. Fixing any one year in this list fixes them all.
Adhika-māsa and seasons
A leap month occurs every 2-3 years. There’s an “adhika” month and “nija” month. For example, right now, we’re in “nija jyēṣtha māsa”. This causes a ṛtu to span three lunar months instead of two! An easy way out is to split the third month (whether it is adhika or not) equally between the two adjacent ṛtus.
In 2026, for example:
| Ṛtu | Months | Dates | Notes |
|---|---|---|---|
| Vasanta | Phālguna to Caitra | Feb 18 - Apr 17 | Normal mapping |
| Grīṣma | Vaiṡākha to Nija Jyēṣtha-S15 | Apr 18 - Jun 29 | ṡukla-pakṣa from third month |
| Varṣa | Nija Jyēṣtha-K1 to Ṡrāvaṇa | Jun 30 - Sep 11 | kṛṣṇa-pakṣa from third month |
| Ṡarad | Bhādra to Āṡvīna | Sep 12 - Nov 09 | Normal mapping |
Caveats
This is an arithmetic rule. Adhika-masa can sneak in on either side of boundary years. An exceptional date might occur on the border cycles of the above Gregorian years.
For example, I said above that after +2407, Feb 19 never occurs in Phālguna. It’s false. It’s trivial to verify that, 19 Feb +2425 is indeed Phālguna-S1. After the year +2425, there are no more Phālguna for 19 Feb. Ṡukla-1 is such a border date, so close to Amāvāsya, that choosing a different location than Ujjain will push it to Caitra-Amāvāsya. In that sense, +2407 is defensible as the border year for season transition.
Conversely, 19 Feb -1982 (Kālayukta samvatsara) is Vaiṡākha-S1. After this date, 19 Feb no longer occurs in Vaiṡākha. We could’ve chosen the beginning of next Prabhava year, -1973 already as the transition year. However we’ve to wait another 60 years, -1973 + 60 = -1913 for the arithmetic to remain consistent. In any case, my assertion that, after -1913, the beginning of vasanta ṛtu never occurs in the month of Vaiṡākha is still true, nonetheless.
The zero point of ayanamshas like those of Citrapakṣa/Lahiri (285 C.E.), Krishnamurti (292 C.E.) and Chandra-Hari (232 C.E., True Mula) occur in the same Jovian cycle surrounding +247 C.E. This is a nice coincidence, unrelated to the legitimacy of the ayanamshas themselves. For example, 285 C.E is Krōdhi/Viṡvāvasu, whose Jovian cycle begain in +247 C.E Kṣaya/Prabhava.
[P.S: Location of Ujjain is used throughout.]
Exact onset of sidereal season
Instead of the above approximation, it’s possible to compute the exact season mapped to a lunar month, in any given year, if we know the ayanamsa as on that day.
import swisseph as swe
def drik_ritu(julday, sidereal_month):
# a full 1-month seasonal shift (30° of precession) takes ~2160 years
offset = round(swe.geṯayanamsa_ut(julday) / 30) # how many months the season has drifted
ritu = ((sidereal_month - 1 + offset) // 2) % 6 # 0 = Vasanta, ..., 5 = Sisisra
return [ritu, offset]
As an example,
drik_ritu_(swe.julday(2026, 1, 1), 12) = [0, 1] # 12 = Phalguna
drik_ritu_(swe.julday(2026, 1, 1), 1) = [0, 1] # 1 = Caitra
Phalguna-Caitra are Vasanta Rtu in 2026. This method depends on the ayanamsha and waits for it to reach 30° before bumping one-month off. It’s not realistic to observed seasons.
Takeaway
The date of Feb 19 (vasanta ṛtu) is just one of the many choices. Choosing another reference, e.g. that Dec 22 (ṡiṡira ṛtu) no longer falls in Māgha (and happens in Puṣya) after year +268.
It’s a matter of convention to pick one Prabhava samvatsara within a narrow window of 250 C.E. ± 100 yrs and we’re all set for millenia to come. They are 187 C.E., 247 C.E. or 307 C.E. I hope that “36 cycles of sixty-Jovian years” will be incorporated into traditional sidereal panchangas, in some form or another.