为什么计算透明度至关重要

大多数潘昌迦网站只展示数字,却不告诉你数据从何而来。你只能相信幕后有人做对了。我们的做法截然相反:整个计算过程逐步公开,你可以随时跟踪,也可以在我们出错时纠正我们。

这不是为了炫耀技术,而是关乎信任。当Toronto的Rahu Kalam与你母亲在Chennai的相差十分钟时,唯一行得通的解释,是能追溯到精确输入数据和透明公式的那一个。否则只是在猜测,而当涉及你认真对待的事情时,猜测是不够的。

以下我们逐层介绍计算过程,从日出到节日日期,提供精确的算法和常数。文字写法让你不需要天文学背景也能跟上,同时包含足够的细节让工程师能够验证每一步。

第一层:太阳、日出、日落、白昼时长

一切从太阳开始。日出和日落决定白昼时段,进而决定Rahu Kalam、Yamagandam、Kuligai、Abhijit Muhurtam和Gowri Panchangam。太阳位置计算有误,其余所有计算也会随之出错。

我们使用NOAA太阳计算器——与US National Oceanic and Atmospheric Administration公开太阳计算器所用的算法相同。它根据儒略日数及观测者的经纬度,计算太阳的黄经、赤纬、时差方程以及日出时的时角。

计算示例

示例:Chennai,2026年1月15日

以下是日出的逐步计算过程:

日期
15 January 2026

输入日期

儒略日
2,461,056.0

格里历日期 → UTC正午的儒略日

儒略世纪(t)
0.2604

(JD − 2,451,545)/ 36,525

太阳几何平均黄经
294.96°

280.47 + 36,000.77 × t

太阳真黄经
295.35°

平均黄经 + 修正项

赤纬
−21.07°

太阳在天赤道以上的高度

时差方程
−9.41 min

日晷时与平均时之差

正午UTC
06:48

720 − 4 × 经度 − 时差方程

时角
85.78°

天顶90.833°时的arccos(cosHA)

日出UTC
01:05

正午 − 4 × 时角

日出当地时间
06:35 IST

UTC + 5:30(印度时区)

Chennai 2026年1月15日的日出为06:35 IST,后续所有计算均以此为基础。

第二层:月球、Meeus第47章

月球位置对Tithi、Nakshatra、Yoga和Karana至关重要——这是潘昌迦五要素中除星期几以外的四项。月球运行速度快:每天约13°,而太阳仅约1°。因此,精确的潘昌迦需要一个好的月球模型。

我们使用Jean Meeus《天文算法》第47章——月球黄经的完整60项ΣL级数。这与严谨的天文历书和天文馆软件所用的模型相同。该级数对月球轨道所有已知摄动的60个调和项求和。

结果是月球的视黄经(度数,沿黄道0°–360°)。结合太阳黄经得到Tithi(月日角距);结合阿亚那姆沙得到Nakshatra(月球的恒星位置)。

要素定义公式
Tithi(1–30)月日角距 ÷ 12°floor(elongation / 12) + 1
Nakshatra(1–27)月球恒星黄经 ÷ 13°20'floor(moon_sidereal / 13.333)
Yoga(1–27)日月恒星黄经之和 ÷ 13°20'floor((sun_sid + moon_sid) / 13.333)
Karana(1–60)半Tithi步长:角距 ÷ 6°floor(elongation / 6)
Vaaram星期几,无需天文计算JavaScript getDay()
潘昌迦五要素各自由日月位置推算的方式。

第三层:阿亚那姆沙,Lahiri(Chitrapaksha)

Tithi取决于日月之间的角度,与坐标系无关。但Nakshatra、Yoga和Rashi需要恒星坐标:相对于恒星的位置,而非春分点。

回归坐标与恒星坐标之间的差值称为阿亚那姆沙。我们使用Lahiri(Chitrapaksha)——印度政府自1956年起官方采用的标准,也是泰米尔潘昌迦传统中最广泛使用的。我们的模型为线性模型,以J2000历元为锚点。

计算示例

Lahiri阿亚那姆沙的实际应用

公式很简单:

J2000时的阿亚那姆沙
23.864°

起始值,2000年1月1日

岁差速率
~50.29 arcseconds/year

≈ 每儒略世纪1.397°

2026年的阿亚那姆沙
≈24.23°

23.864 + 1.397 × 0.26

所有恒星位置均通过从回归黄经中减去该阿亚那姆沙来计算。

其他系统(KP、Raman、Yukteshwar)使用略有不同的值,但差异在2°以内,通常仅在极少数情况下才会使Nakshatra边界发生偏移。

第四层:Rahu Kalam与三个不宜时段

Rahu Kalam、Yamagandam和Kuligai均基于同一原理:将白昼(日出到日落)均分为八段,根据星期几选取其中一段。这是纯算术计算,但精确结果依赖于正确的日出日落时间。

星期Rahu(时段)YamagandamKuligai
周日第8段第5段第7段
周一第2段第4段第6段
周二第7段第3段第5段
周三第5段第2段第4段
周四第6段第1段第3段
周五第4段第7段第2段
周六第3段第6段第1段
三个不宜时段的时段分配。每段为白昼 ÷ 8。

计算示例

示例:Chennai某周一的Rahu Kalam

日出06:35,日落18:01,周一取第2段:

白昼时长
686 minutes

18:01 − 06:35 = 11小时26分

单段时长
85.75 min

686 / 8 ≈ 1小时26分

第2段开始
06:35 + 85.75 = 08:00

日出 + 1 × 段长

第2段结束
08:00 + 85.75 = 09:26

开始 + 段长

Chennai一月份周一的Rahu Kalam:大约08:00–09:26 IST。

第五层:Abhijit Muhurtam——吉祥正午时窗

Abhijit Muhurtam是白昼15个等分Muhurta时段中的第8段,精确以正午为中心。计算简单,但需要准确的日出日落时间:

  • 正午 = (日出 + 日落)/ 2
  • 半Muhurta = (日落 − 日出)/ 30
  • Abhijit开始 = 正午 − 半Muhurta
  • Abhijit结束 = 正午 + 半Muhurta

在Chennai一月(日出06:35,日落18:01),Abhijit时窗约为11:55至12:41,约46分钟。在Copenhagen六月,白昼长得多,时窗超过一小时。

第六层:节日与纪念日

节日使用两套完全不同的来源体系。主要固定节日(Pongal、Deepavali、Thai Pongal、Puthandu)由编辑团队精心整理:手动录入日期,对照官方历法出版物双重核验,数据涵盖2026至2029年。

每月的例行斋戒日(Amavasai、Pournami、Ekadasi、Pradosham、Sashti、Karthigai等)根据Tithi和Nakshatra实时计算,方法与上文完全相同。计算时始终以Chennai的日出作为参考点,即使你身处London。为什么?因为节日日期由圣地日出时生效的Tithi决定,而非你当地的日出。

无外部依赖——这是有意为之的

整个计算引擎用纯TypeScript编写。它不导入任何外部天文库,不调用任何API,也不查询任何数据库。同一段代码在页面构建时在服务器上运行,也在你选择新城市时在浏览器中运行。结果是确定性的:相同的输入,在任何地方,任何时候,都会得到完全相同的输出。

这个选择是有意为之的。当计算完全自给自足时,就不存在会宕机的服务器,不存在会过期的API密钥,也不存在第三方变更悄悄改变我们数字的可能。这意味着你或任何人都可以通过查看开源代码来验证每一个数字。

模块算法 / 来源提供的内容
solar.tsNOAA太阳计算器日出、日落、正午、太阳黄经
lunar.tsMeeus《天文算法》第47章(60项ΣL)月球黄经、Tithi、Nakshatra、Yoga、Karana
lunar.tsLahiri阿亚那姆沙(23.864° + 1.397 × t)Nakshatra和Yoga的恒星位置
windows.ts白昼 ÷ 8,按星期几选段Rahu Kalam、Yamagandam、Kuligai
index.ts(sunrise + sunset) / 2 ± daylight/30Abhijit Muhurtam
gowri.ts白昼的8个Gowri时段Gowri Panchangam / Nalla Neram
festivals.tsChennai日出时的Tithi/Nakshatra + 精选数据集节日和例行斋戒日日期
tamilCalendar.ts太阳恒星黄经 → 泰米尔月份泰米尔日期(Chithirai、Vaikasi等)
计算引擎中的所有模块及其来源。

我们不计算的内容——以及原因

本日历专注于能以天文精度计算的内容。但潘昌迦世界中有些话题我们有意不纳入计算,因为它们要么需要主观判断,要么因流派而异:

  • 婚礼和仪式的吉时(Muhurtham)选定——需要星盘解读,我们不对其自动化。
  • 大夏期(Dasha)和行星力量——依赖占星传统,而非天文学。
  • 有地方差异的神庙节日——由各庙的传统决定,并非集中统一。

与其展示一个我们无法担保的数字,不如什么都不显示。这是整个日历的创立原则。