jyotish-calc 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/index.js +4 -1
- package/package.json +2 -2
- package/src/panchanga/constants.js +266 -0
- package/src/panchanga/index.js +330 -0
- package/src/panchanga/karana.js +185 -0
- package/src/panchanga/lunar-calendar.js +207 -0
- package/src/panchanga/muhurtas.js +370 -0
- package/src/panchanga/nakshatra.js +180 -0
- package/src/panchanga/solar-calendar.js +301 -0
- package/src/panchanga/sunrise-sunset.js +400 -0
- package/src/panchanga/tithi.js +234 -0
- package/src/panchanga/utils.js +320 -0
- package/src/panchanga/vaara.js +182 -0
- package/src/panchanga/yogam.js +196 -0
- package/get-full-results.js +0 -140
- package/test-chennai-1998.js +0 -162
package/README.md
CHANGED
|
@@ -16,6 +16,7 @@ npm install jyotish-calc
|
|
|
16
16
|
## Features
|
|
17
17
|
|
|
18
18
|
- **Graha Calculations**: Calculate positions and aspects of the nine planets (grahas)
|
|
19
|
+
- **Panchanga**: Complete Vedic calendar with tithi, nakshatra, yoga, karana, vaara, muhurtas
|
|
19
20
|
- **Special Lagnas**: Calculate Bhava Lagna, Hora Lagna, Ghati Lagna, etc.
|
|
20
21
|
- **Upagrahas**: Calculate shadow planets like Gulika, Mandi, Dhuma, etc.
|
|
21
22
|
- **Ashtakavarga**: Complete BAV and SAV calculations with house strength analysis
|
|
@@ -30,6 +31,7 @@ jyotish
|
|
|
30
31
|
├── index.js # Main entry point
|
|
31
32
|
├── package.json # Package configuration
|
|
32
33
|
└── src
|
|
34
|
+
├── panchanga # Panchanga (Vedic calendar/almanac)
|
|
33
35
|
├── ashtakavarga # Ashtakavarga (BAV & SAV) calculations
|
|
34
36
|
├── lagnas # Special Lagna calculations
|
|
35
37
|
├── upagrahas # Upagraha calculations
|
|
@@ -43,6 +45,7 @@ jyotish
|
|
|
43
45
|
└── utils # Helper utilities
|
|
44
46
|
```
|
|
45
47
|
|
|
48
|
+
|
|
46
49
|
## Usage
|
|
47
50
|
|
|
48
51
|
### Basic Planetary Positions
|
|
@@ -163,8 +166,30 @@ const allPoints = {
|
|
|
163
166
|
const d9Chart = vargas.calculateVargaChart(allPoints, 'D9');
|
|
164
167
|
```
|
|
165
168
|
|
|
169
|
+
### Panchanga (Vedic Calendar)
|
|
170
|
+
|
|
171
|
+
Complete Vedic almanac with all 5 elements, muhurtas, and calendar functions.
|
|
172
|
+
|
|
173
|
+
```javascript
|
|
174
|
+
const { panchanga } = require('jyotish-calc');
|
|
175
|
+
|
|
176
|
+
const panchangaData = panchanga.calculatePanchanga({
|
|
177
|
+
year: 1998, month: 9, date: 11,
|
|
178
|
+
hour: 4, min: 30, sec: 0,
|
|
179
|
+
lat: 13.0827, lng: 80.2707, timezone: 5.5
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
console.log(panchangaData.sunrise); // {time: 5.97, string: "05:57:55 AM"}
|
|
183
|
+
console.log(panchangaData.tithi); // {number: 21, name: "Shashthi", paksha: "Krishna"}
|
|
184
|
+
console.log(panchangaData.nakshatra); // {number: 2, name: "Bharani", pada: 4}
|
|
185
|
+
console.log(panchangaData.yoga); // {number: 13, name: "Vyaghata"}
|
|
186
|
+
console.log(panchangaData.vaara); // {name: "Friday", nameSanskrit: "Shukravara"}
|
|
187
|
+
console.log(panchangaData.muhurtas.raahuKaalam); // {start: "10:34 AM", end: "12:05 PM"}
|
|
188
|
+
```
|
|
189
|
+
|
|
166
190
|
### Ashtakavarga
|
|
167
191
|
|
|
192
|
+
|
|
168
193
|
Complete strength assessment system.
|
|
169
194
|
|
|
170
195
|
```javascript
|
package/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const strengths = require('./src/strengths/index');
|
|
|
8
8
|
const lagnas = require('./src/lagnas/index');
|
|
9
9
|
const upagrahas = require('./src/upagrahas/index');
|
|
10
10
|
const ashtakavarga = require('./src/ashtakavarga/index');
|
|
11
|
+
const panchanga = require('./src/panchanga/index');
|
|
11
12
|
|
|
12
13
|
module.exports = {
|
|
13
14
|
grahas,
|
|
@@ -19,5 +20,7 @@ module.exports = {
|
|
|
19
20
|
strengths,
|
|
20
21
|
lagnas,
|
|
21
22
|
upagrahas,
|
|
22
|
-
ashtakavarga
|
|
23
|
+
ashtakavarga,
|
|
24
|
+
panchanga
|
|
23
25
|
}
|
|
26
|
+
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jyotish-calc",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Comprehensive Vedic Astrology library with Special Lagnas, Upagrahas, Ashtakavarga, Dashas, Vargas, and Shadbala",
|
|
3
|
+
"version": "1.3.0",
|
|
4
|
+
"description": "Comprehensive Vedic Astrology library with Panchanga, Special Lagnas, Upagrahas, Ashtakavarga, Dashas, Vargas, and Shadbala",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "jest",
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panchanga Constants
|
|
3
|
+
* Core constants for Vedic calendar calculations
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// ============ ASTRONOMICAL CONSTANTS ============
|
|
7
|
+
|
|
8
|
+
// Kali Yuga epoch - Julian Day Number for Feb 18, 3102 BCE
|
|
9
|
+
const KALI_YUGA_JD = 588465.5;
|
|
10
|
+
|
|
11
|
+
// Mahabharata date for special tithi handling
|
|
12
|
+
const MAHABHARATA_JD = 588465.5;
|
|
13
|
+
|
|
14
|
+
// Year lengths
|
|
15
|
+
const SIDEREAL_YEAR = 365.256363;
|
|
16
|
+
const TROPICAL_YEAR = 365.2421988;
|
|
17
|
+
const SYNODIC_MONTH = 29.530588853;
|
|
18
|
+
|
|
19
|
+
// Degree measures
|
|
20
|
+
const ONE_TITHI = 12; // 360/30 degrees
|
|
21
|
+
const ONE_NAKSHATRA = 13.333333; // 360/27 degrees
|
|
22
|
+
const ONE_YOGA = 13.333333; // 360/27 degrees
|
|
23
|
+
const ONE_PADA = 3.333333; // 360/108 degrees
|
|
24
|
+
|
|
25
|
+
// ============ PANCHANGA ELEMENT NAMES ============
|
|
26
|
+
|
|
27
|
+
const TITHI_NAMES = [
|
|
28
|
+
'Pratipada', 'Dwitiya', 'Tritiya', 'Chaturthi', 'Panchami',
|
|
29
|
+
'Shashthi', 'Saptami', 'Ashtami', 'Navami', 'Dashami',
|
|
30
|
+
'Ekadashi', 'Dwadashi', 'Trayodashi', 'Chaturdashi', 'Purnima',
|
|
31
|
+
'Pratipada', 'Dwitiya', 'Tritiya', 'Chaturthi', 'Panchami',
|
|
32
|
+
'Shashthi', 'Saptami', 'Ashtami', 'Navami', 'Dashami',
|
|
33
|
+
'Ekadashi', 'Dwadashi', 'Trayodashi', 'Chaturdashi', 'Amavasya'
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const NAKSHATRA_NAMES = [
|
|
37
|
+
'Ashwini', 'Bharani', 'Krittika', 'Rohini', 'Mrigashira',
|
|
38
|
+
'Ardra', 'Punarvasu', 'Pushya', 'Ashlesha', 'Magha',
|
|
39
|
+
'Purva Phalguni', 'Uttara Phalguni', 'Hasta', 'Chitra', 'Swati',
|
|
40
|
+
'Vishakha', 'Anuradha', 'Jyeshtha', 'Mula', 'Purva Ashadha',
|
|
41
|
+
'Uttara Ashadha', 'Shravana', 'Dhanishtha', 'Shatabhisha', 'Purva Bhadrapada',
|
|
42
|
+
'Uttara Bhadrapada', 'Revati'
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const YOGA_NAMES = [
|
|
46
|
+
'Vishkambha', 'Priti', 'Ayushman', 'Saubhagya', 'Shobhana',
|
|
47
|
+
'Atiganda', 'Sukarma', 'Dhriti', 'Shoola', 'Ganda',
|
|
48
|
+
'Vriddhi', 'Dhruva', 'Vyaghata', 'Harshana', 'Vajra',
|
|
49
|
+
'Siddhi', 'Vyatipata', 'Variyan', 'Parigha', 'Shiva',
|
|
50
|
+
'Siddha', 'Sadhya', 'Shubha', 'Shukla', 'Brahma',
|
|
51
|
+
'Indra', 'Vaidhriti'
|
|
52
|
+
];
|
|
53
|
+
|
|
54
|
+
const KARANA_NAMES = [
|
|
55
|
+
'Kimstughna', 'Bava', 'Balava', 'Kaulava', 'Taitila',
|
|
56
|
+
'Garaja', 'Vanija', 'Vishti', 'Shakuni', 'Chatushpada', 'Naga'
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const VAARA_NAMES = [
|
|
60
|
+
'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
const VAARA_NAMES_SANSKRIT = [
|
|
64
|
+
'Ravivara', 'Somavara', 'Mangalavara', 'Budhavara', 'Guruvara', 'Shukravara', 'Shanivara'
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const PAKSHA_NAMES = ['Shukla', 'Krishna'];
|
|
68
|
+
|
|
69
|
+
const LUNAR_MONTH_NAMES = [
|
|
70
|
+
'Chaitra', 'Vaishakha', 'Jyeshtha', 'Ashadha', 'Shravana', 'Bhadrapada',
|
|
71
|
+
'Ashwin', 'Kartik', 'Margashirsha', 'Pausha', 'Magha', 'Phalguna'
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const SOLAR_MONTH_NAMES = [
|
|
75
|
+
'Mesha', 'Vrishabha', 'Mithuna', 'Karka', 'Simha', 'Kanya',
|
|
76
|
+
'Tula', 'Vrishchika', 'Dhanu', 'Makara', 'Kumbha', 'Meena'
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
const TAMIL_MONTH_NAMES = [
|
|
80
|
+
'Chithirai', 'Vaikasi', 'Aani', 'Aadi', 'Aavani', 'Purattasi',
|
|
81
|
+
'Aippasi', 'Karthigai', 'Margazhi', 'Thai', 'Maasi', 'Panguni'
|
|
82
|
+
];
|
|
83
|
+
|
|
84
|
+
const SAMVATSARA_NAMES = [
|
|
85
|
+
'Prabhava', 'Vibhava', 'Shukla', 'Pramodoota', 'Prajothpatti',
|
|
86
|
+
'Angirasa', 'Srimukha', 'Bhava', 'Yuva', 'Dhatru',
|
|
87
|
+
'Ishvara', 'Bahudhanya', 'Pramathi', 'Vikrama', 'Vrisha',
|
|
88
|
+
'Chitrabhanu', 'Svabhanu', 'Tarana', 'Parthiva', 'Vyaya',
|
|
89
|
+
'Sarvajit', 'Sarvadhari', 'Virodhi', 'Vikrita', 'Khara',
|
|
90
|
+
'Nandana', 'Vijaya', 'Jaya', 'Manmatha', 'Durmukhi',
|
|
91
|
+
'Hevilambi', 'Vilambi', 'Vikari', 'Sharvari', 'Plava',
|
|
92
|
+
'Shubhakrit', 'Shobhakrit', 'Krodhi', 'Vishvavasu', 'Parabhava',
|
|
93
|
+
'Plavanga', 'Kilaka', 'Saumya', 'Sadharana', 'Virodhikrit',
|
|
94
|
+
'Paridhaavi', 'Pramadicha', 'Ananda', 'Rakshasa', 'Nala',
|
|
95
|
+
'Pingala', 'Kalayukti', 'Siddharthi', 'Raudra', 'Durmathi',
|
|
96
|
+
'Dundubhi', 'Rudhirodgari', 'Raktakshi', 'Krodhana', 'Akshaya'
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
const RITU_NAMES = [
|
|
100
|
+
'Vasanta', 'Grishma', 'Varsha', 'Sharad', 'Hemanta', 'Shishira'
|
|
101
|
+
];
|
|
102
|
+
|
|
103
|
+
// ============ MUHURTA CONSTANTS ============
|
|
104
|
+
|
|
105
|
+
// Trikalam offsets from sunrise (fraction of day)
|
|
106
|
+
// Index by weekday: 0=Sunday, 1=Monday, ..., 6=Saturday
|
|
107
|
+
const RAAHU_KAALAM_OFFSETS = [0.875, 0.125, 0.75, 0.5, 0.625, 0.375, 0.25];
|
|
108
|
+
const GULIKAI_OFFSETS = [0.75, 0.625, 0.5, 0.375, 0.25, 0.125, 0.0];
|
|
109
|
+
const YAMAGANDAM_OFFSETS = [0.5, 0.375, 0.25, 0.125, 0.0, 0.75, 0.625];
|
|
110
|
+
|
|
111
|
+
// Durmuhurtam offsets from sunrise (in 1/12ths of day duration)
|
|
112
|
+
// [offset1, offset2] - some days have only 1 durmuhurtam
|
|
113
|
+
const DURMUHURTAM_OFFSETS = [
|
|
114
|
+
[10.4, 0.0], // Sunday
|
|
115
|
+
[6.4, 8.8], // Monday
|
|
116
|
+
[2.4, 4.8], // Tuesday (second uses night duration)
|
|
117
|
+
[5.6, 0.0], // Wednesday
|
|
118
|
+
[4.0, 8.8], // Thursday
|
|
119
|
+
[2.4, 6.4], // Friday
|
|
120
|
+
[1.6, 0.0] // Saturday
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
// Gauri Choghadiya day table (1/8 of day, 8 periods)
|
|
124
|
+
// 0=Udveg, 1=Char, 2=Labh, 3=Amrit, 4=Kaal, 5=Shubh, 6=Rog
|
|
125
|
+
const GAURI_CHOGHADIYA_DAY = [
|
|
126
|
+
[0, 1, 2, 3, 4, 5, 6, 0], // Sunday
|
|
127
|
+
[3, 4, 5, 6, 0, 1, 2, 3], // Monday
|
|
128
|
+
[6, 0, 1, 2, 3, 4, 5, 6], // Tuesday
|
|
129
|
+
[2, 3, 4, 5, 6, 0, 1, 2], // Wednesday
|
|
130
|
+
[5, 6, 0, 1, 2, 3, 4, 5], // Thursday
|
|
131
|
+
[1, 2, 3, 4, 5, 6, 0, 1], // Friday
|
|
132
|
+
[4, 5, 6, 0, 1, 2, 3, 4] // Saturday
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
const GAURI_CHOGHADIYA_NIGHT = [
|
|
136
|
+
[6, 5, 4, 3, 2, 1, 0, 6], // Sunday night
|
|
137
|
+
[2, 1, 0, 6, 5, 4, 3, 2], // Monday night
|
|
138
|
+
[5, 4, 3, 2, 1, 0, 6, 5], // Tuesday night
|
|
139
|
+
[1, 0, 6, 5, 4, 3, 2, 1], // Wednesday night
|
|
140
|
+
[4, 3, 2, 1, 0, 6, 5, 4], // Thursday night
|
|
141
|
+
[0, 6, 5, 4, 3, 2, 1, 0], // Friday night
|
|
142
|
+
[3, 2, 1, 0, 6, 5, 4, 3] // Saturday night
|
|
143
|
+
];
|
|
144
|
+
|
|
145
|
+
const CHOGHADIYA_NAMES = ['Udveg', 'Char', 'Labh', 'Amrit', 'Kaal', 'Shubh', 'Rog'];
|
|
146
|
+
|
|
147
|
+
// Planetary hora rulers by day (12 day + 12 night)
|
|
148
|
+
// Order: Sun(0), Venus(5), Mercury(3), Moon(1), Saturn(6), Jupiter(4), Mars(2)
|
|
149
|
+
const HORA_SEQUENCE = [0, 5, 3, 1, 6, 4, 2]; // Repeats
|
|
150
|
+
|
|
151
|
+
// Day rulers for upagraha calculations (by weekday)
|
|
152
|
+
const DAY_RULERS = [
|
|
153
|
+
[0, 1, 2, 3, 4, 5, 6, null], // Sunday: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, -
|
|
154
|
+
[1, 2, 3, 4, 5, 6, 0, null], // Monday
|
|
155
|
+
[2, 3, 4, 5, 6, 0, 1, null], // Tuesday
|
|
156
|
+
[3, 4, 5, 6, 0, 1, 2, null], // Wednesday
|
|
157
|
+
[4, 5, 6, 0, 1, 2, 3, null], // Thursday
|
|
158
|
+
[5, 6, 0, 1, 2, 3, 4, null], // Friday
|
|
159
|
+
[6, 0, 1, 2, 3, 4, 5, null] // Saturday
|
|
160
|
+
];
|
|
161
|
+
|
|
162
|
+
const NIGHT_RULERS = [
|
|
163
|
+
[4, 5, 6, 0, 1, 2, 3, null], // Sunday night
|
|
164
|
+
[5, 6, 0, 1, 2, 3, 4, null], // Monday night
|
|
165
|
+
[6, 0, 1, 2, 3, 4, 5, null], // Tuesday night
|
|
166
|
+
[0, 1, 2, 3, 4, 5, 6, null], // Wednesday night
|
|
167
|
+
[1, 2, 3, 4, 5, 6, 0, null], // Thursday night
|
|
168
|
+
[2, 3, 4, 5, 6, 0, 1, null], // Friday night
|
|
169
|
+
[3, 4, 5, 6, 0, 1, 2, null] // Saturday night
|
|
170
|
+
];
|
|
171
|
+
|
|
172
|
+
// ============ SPECIAL YOGA TABLES ============
|
|
173
|
+
|
|
174
|
+
// Amrita Siddha Yoga - auspicious star-weekday combinations
|
|
175
|
+
const AMRITA_SIDDHA_YOGA = {
|
|
176
|
+
0: [1, 6, 12, 17, 23], // Sunday: Bharani, Ardra, Hasta, Anuradha, Shatabhisha
|
|
177
|
+
1: [4, 9, 14, 19, 24], // Monday: Rohini, Ashlesha, Chitra, Mula, P.Bhadra
|
|
178
|
+
2: [3, 8, 13, 18, 23], // Tuesday: Krittika, Pushya, Hasta, Jyeshtha, Shatabhisha
|
|
179
|
+
3: [2, 7, 12, 17, 22], // Wednesday: Bharani, Punarvasu, Hasta, Anuradha, Shravana
|
|
180
|
+
4: [5, 10, 15, 20, 25], // Thursday: Mrigashira, Magha, Swati, P.Ashadha, U.Bhadra
|
|
181
|
+
5: [1, 6, 11, 16, 21], // Friday: Bharani, Ardra, U.Phalguni, Vishakha, U.Ashadha
|
|
182
|
+
6: [4, 9, 14, 19, 24] // Saturday: Rohini, Ashlesha, Chitra, Mula, P.Bhadra
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// Mrityu Yoga - inauspicious star-weekday combinations
|
|
186
|
+
const MRITYU_YOGA = {
|
|
187
|
+
0: 14, // Sunday - Chitra
|
|
188
|
+
1: 7, // Monday - Punarvasu
|
|
189
|
+
2: 4, // Tuesday - Rohini
|
|
190
|
+
3: 13, // Wednesday - Hasta
|
|
191
|
+
4: 21, // Thursday - U.Ashadha
|
|
192
|
+
5: 22, // Friday - Shravana
|
|
193
|
+
6: 9 // Saturday - Ashlesha
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
// Dagdha Yoga - burnt combinations
|
|
197
|
+
const DAGDHA_YOGA = {
|
|
198
|
+
0: 12, // Sunday - Hasta
|
|
199
|
+
1: 6, // Monday - Ardra
|
|
200
|
+
2: 17, // Tuesday - Anuradha
|
|
201
|
+
3: 3, // Wednesday - Krittika
|
|
202
|
+
4: 9, // Thursday - Ashlesha
|
|
203
|
+
5: 18, // Friday - Jyeshtha
|
|
204
|
+
6: 22 // Saturday - Shravana
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// ============ AYANAMSA CONSTANTS ============
|
|
208
|
+
|
|
209
|
+
const AYANAMSA_MODES = {
|
|
210
|
+
FAGAN: 0,
|
|
211
|
+
LAHIRI: 1,
|
|
212
|
+
DELUCE: 2,
|
|
213
|
+
RAMAN: 3,
|
|
214
|
+
KP: 4,
|
|
215
|
+
KRISHNAMURTI: 5,
|
|
216
|
+
DJWHAL_KHUL: 6,
|
|
217
|
+
YUKTESHWAR: 7,
|
|
218
|
+
JN_BHASIN: 8,
|
|
219
|
+
BABYL_KUGLER1: 9,
|
|
220
|
+
BABYL_KUGLER2: 10,
|
|
221
|
+
BABYL_KUGLER3: 11,
|
|
222
|
+
BABYL_HUBER: 12,
|
|
223
|
+
TRUE_CITRA: 27,
|
|
224
|
+
TRUE_REVATI: 28,
|
|
225
|
+
TRUE_PUSHYA: 29
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
const DEFAULT_AYANAMSA = 'LAHIRI';
|
|
229
|
+
|
|
230
|
+
// ============ SIGN CONSTANTS ============
|
|
231
|
+
|
|
232
|
+
const SIGN_NAMES = [
|
|
233
|
+
'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
|
|
234
|
+
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'
|
|
235
|
+
];
|
|
236
|
+
|
|
237
|
+
const MOVABLE_SIGNS = [0, 3, 6, 9]; // Aries, Cancer, Libra, Capricorn
|
|
238
|
+
const FIXED_SIGNS = [1, 4, 7, 10]; // Taurus, Leo, Scorpio, Aquarius
|
|
239
|
+
const DUAL_SIGNS = [2, 5, 8, 11]; // Gemini, Virgo, Sagittarius, Pisces
|
|
240
|
+
|
|
241
|
+
module.exports = {
|
|
242
|
+
// Astronomical
|
|
243
|
+
KALI_YUGA_JD, MAHABHARATA_JD, SIDEREAL_YEAR, TROPICAL_YEAR, SYNODIC_MONTH,
|
|
244
|
+
ONE_TITHI, ONE_NAKSHATRA, ONE_YOGA, ONE_PADA,
|
|
245
|
+
|
|
246
|
+
// Names
|
|
247
|
+
TITHI_NAMES, NAKSHATRA_NAMES, YOGA_NAMES, KARANA_NAMES,
|
|
248
|
+
VAARA_NAMES, VAARA_NAMES_SANSKRIT, PAKSHA_NAMES,
|
|
249
|
+
LUNAR_MONTH_NAMES, SOLAR_MONTH_NAMES, TAMIL_MONTH_NAMES,
|
|
250
|
+
SAMVATSARA_NAMES, RITU_NAMES, SIGN_NAMES,
|
|
251
|
+
|
|
252
|
+
// Muhurta tables
|
|
253
|
+
RAAHU_KAALAM_OFFSETS, GULIKAI_OFFSETS, YAMAGANDAM_OFFSETS,
|
|
254
|
+
DURMUHURTAM_OFFSETS,
|
|
255
|
+
GAURI_CHOGHADIYA_DAY, GAURI_CHOGHADIYA_NIGHT, CHOGHADIYA_NAMES,
|
|
256
|
+
HORA_SEQUENCE, DAY_RULERS, NIGHT_RULERS,
|
|
257
|
+
|
|
258
|
+
// Yoga tables
|
|
259
|
+
AMRITA_SIDDHA_YOGA, MRITYU_YOGA, DAGDHA_YOGA,
|
|
260
|
+
|
|
261
|
+
// Ayanamsa
|
|
262
|
+
AYANAMSA_MODES, DEFAULT_AYANAMSA,
|
|
263
|
+
|
|
264
|
+
// Signs
|
|
265
|
+
MOVABLE_SIGNS, FIXED_SIGNS, DUAL_SIGNS
|
|
266
|
+
};
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panchanga Module - Main Entry Point
|
|
3
|
+
* Comprehensive Vedic Calendar/Almanac Calculations
|
|
4
|
+
*
|
|
5
|
+
* Provides calculations for:
|
|
6
|
+
* - Panchangam (5 elements): Tithi, Nakshatra, Yoga, Karana, Vaara
|
|
7
|
+
* - Sunrise/Sunset and Moon rise/set
|
|
8
|
+
* - Lunar calendar with Adhika month detection
|
|
9
|
+
* - Solar calendar with Sankranti
|
|
10
|
+
* - Muhurtas (auspicious/inauspicious time periods)
|
|
11
|
+
* - Samvatsara (60-year cycle)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// Core modules
|
|
15
|
+
const constants = require('./constants');
|
|
16
|
+
const utils = require('./utils');
|
|
17
|
+
const sunriseSunset = require('./sunrise-sunset');
|
|
18
|
+
|
|
19
|
+
// Panchanga elements
|
|
20
|
+
const tithiModule = require('./tithi');
|
|
21
|
+
const nakshatraModule = require('./nakshatra');
|
|
22
|
+
const yogamModule = require('./yogam');
|
|
23
|
+
const karanaModule = require('./karana');
|
|
24
|
+
const vaaraModule = require('./vaara');
|
|
25
|
+
|
|
26
|
+
// Calendar modules
|
|
27
|
+
const lunarCalendar = require('./lunar-calendar');
|
|
28
|
+
const solarCalendar = require('./solar-calendar');
|
|
29
|
+
|
|
30
|
+
// Muhurtas
|
|
31
|
+
const muhurtas = require('./muhurtas');
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Calculate complete Panchanga for a given date and place
|
|
35
|
+
*
|
|
36
|
+
* IMPORTANT: Uses Vedic day (sunrise-to-sunrise).
|
|
37
|
+
* For times before sunrise, uses previous day's sunrise and vaara.
|
|
38
|
+
*
|
|
39
|
+
* @param {object} birthData - {year, month, date, hour, min, sec, lat, lng, timezone}
|
|
40
|
+
* @returns {object} Complete panchanga data
|
|
41
|
+
*/
|
|
42
|
+
function calculatePanchanga(birthData) {
|
|
43
|
+
const { year, month, date, hour = 0, min = 0, sec = 0, lat, lng, timezone } = birthData;
|
|
44
|
+
|
|
45
|
+
const jd = utils.dateToJD(year, month, date, hour + min / 60 + sec / 3600);
|
|
46
|
+
const place = { latitude: lat, longitude: lng, timezone };
|
|
47
|
+
const currentTime = hour + min / 60 + sec / 3600;
|
|
48
|
+
|
|
49
|
+
// Calculate today's sunrise to determine Vedic day
|
|
50
|
+
const todaySunrise = sunriseSunset.sunrise(jd, place);
|
|
51
|
+
|
|
52
|
+
// Determine if birth is before sunrise (previous Vedic day)
|
|
53
|
+
const isBeforeSunrise = todaySunrise && currentTime < todaySunrise.hours;
|
|
54
|
+
|
|
55
|
+
// For Vedic day, if before sunrise, use previous day's sunrise
|
|
56
|
+
let vedicDayJD = jd;
|
|
57
|
+
let vedicSunrise, vedicSunset;
|
|
58
|
+
|
|
59
|
+
if (isBeforeSunrise) {
|
|
60
|
+
vedicDayJD = jd - 1; // Previous day
|
|
61
|
+
vedicSunrise = sunriseSunset.sunrise(vedicDayJD, place);
|
|
62
|
+
vedicSunset = sunriseSunset.sunset(vedicDayJD, place);
|
|
63
|
+
} else {
|
|
64
|
+
vedicSunrise = todaySunrise;
|
|
65
|
+
vedicSunset = sunriseSunset.sunset(jd, place);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Calculate Vedic vaara (accounts for sunrise-based day)
|
|
69
|
+
const vedicVaaraData = vaaraModule.vedicVaara(jd, place, todaySunrise);
|
|
70
|
+
|
|
71
|
+
// Moon rise/set for the calendar date
|
|
72
|
+
const moonriseData = sunriseSunset.moonrise(jd, place);
|
|
73
|
+
const moonsetData = sunriseSunset.moonset(jd, place);
|
|
74
|
+
|
|
75
|
+
// IMPORTANT: Panchanga elements (tithi, nakshatra, yoga, karana) are calculated
|
|
76
|
+
// for the ACTUAL BIRTH MOMENT (jd), not the Vedic day start
|
|
77
|
+
// These elements reflect the astronomical positions at the exact time
|
|
78
|
+
const tithiData = tithiModule.tithi(jd, place);
|
|
79
|
+
const nakshatraData = nakshatraModule.nakshatra(jd, place);
|
|
80
|
+
const yogaData = yogamModule.yogam(jd, place);
|
|
81
|
+
const karanaData = karanaModule.karana(jd, place);
|
|
82
|
+
|
|
83
|
+
// Calendar data for the Vedic day
|
|
84
|
+
const lunarMonthData = lunarCalendar.lunarMonth(jd, place);
|
|
85
|
+
const solarMonthData = solarCalendar.raasi(jd, place);
|
|
86
|
+
const samvatsaraData = solarCalendar.samvatsara(jd, place);
|
|
87
|
+
|
|
88
|
+
// Muhurtas use the Vedic day's sunrise/sunset for time divisions
|
|
89
|
+
const raahuKaalam = muhurtas.raahuKaalam(vedicDayJD, place);
|
|
90
|
+
const yamagandaKaalam = muhurtas.yamagandaKaalam(vedicDayJD, place);
|
|
91
|
+
const gulikaiKaalam = muhurtas.gulikaiKaalam(vedicDayJD, place);
|
|
92
|
+
const abhijitMuhurta = muhurtas.abhijitMuhurta(vedicDayJD, place);
|
|
93
|
+
const brahmaMuhurta = muhurtas.brahmaMuhurta(vedicDayJD, place);
|
|
94
|
+
const durmuhurtamData = muhurtas.durmuhurtam(vedicDayJD, place);
|
|
95
|
+
|
|
96
|
+
// Calculate Vedic day length
|
|
97
|
+
const vedicDayLength = vedicSunset && vedicSunrise ?
|
|
98
|
+
vedicSunset.hours - vedicSunrise.hours : 12;
|
|
99
|
+
const vedicNightLength = 24 - vedicDayLength;
|
|
100
|
+
|
|
101
|
+
return {
|
|
102
|
+
date: { year, month, date },
|
|
103
|
+
time: { hour, min, sec },
|
|
104
|
+
place: { latitude: lat, longitude: lng, timezone },
|
|
105
|
+
julianDay: jd,
|
|
106
|
+
isBeforeSunrise,
|
|
107
|
+
vedicDate: isBeforeSunrise ? {
|
|
108
|
+
year: utils.jdToDate(vedicDayJD).year,
|
|
109
|
+
month: utils.jdToDate(vedicDayJD).month,
|
|
110
|
+
day: Math.floor(utils.jdToDate(vedicDayJD).day)
|
|
111
|
+
} : { year, month, day: date },
|
|
112
|
+
|
|
113
|
+
// Sun/Moon times (for Vedic day)
|
|
114
|
+
sunrise: vedicSunrise ? {
|
|
115
|
+
time: vedicSunrise.hours,
|
|
116
|
+
string: vedicSunrise.string,
|
|
117
|
+
string24: vedicSunrise.string24,
|
|
118
|
+
date: isBeforeSunrise ? `${month}/${date - 1}` : `${month}/${date}`
|
|
119
|
+
} : null,
|
|
120
|
+
sunset: vedicSunset ? {
|
|
121
|
+
time: vedicSunset.hours,
|
|
122
|
+
string: vedicSunset.string,
|
|
123
|
+
string24: vedicSunset.string24
|
|
124
|
+
} : null,
|
|
125
|
+
moonrise: moonriseData ? {
|
|
126
|
+
time: moonriseData.hours,
|
|
127
|
+
string: moonriseData.string
|
|
128
|
+
} : null,
|
|
129
|
+
moonset: moonsetData ? {
|
|
130
|
+
time: moonsetData.hours,
|
|
131
|
+
string: moonsetData.string
|
|
132
|
+
} : null,
|
|
133
|
+
dayLength: vedicDayLength,
|
|
134
|
+
nightLength: vedicNightLength,
|
|
135
|
+
|
|
136
|
+
// Panchanga (5 elements)
|
|
137
|
+
tithi: tithiData ? {
|
|
138
|
+
number: tithiData.number,
|
|
139
|
+
name: tithiData.name,
|
|
140
|
+
paksha: tithiData.paksha,
|
|
141
|
+
tithiInPaksha: tithiData.tithiInPaksha,
|
|
142
|
+
endTime: tithiData.endTimeString,
|
|
143
|
+
nextTithi: tithiData.nextTithi
|
|
144
|
+
} : null,
|
|
145
|
+
|
|
146
|
+
nakshatra: nakshatraData ? {
|
|
147
|
+
number: nakshatraData.number,
|
|
148
|
+
name: nakshatraData.name,
|
|
149
|
+
pada: nakshatraData.pada,
|
|
150
|
+
endTime: nakshatraData.endTimeString,
|
|
151
|
+
nextNakshatra: nakshatraData.nextNakshatra
|
|
152
|
+
} : null,
|
|
153
|
+
|
|
154
|
+
yoga: yogaData ? {
|
|
155
|
+
number: yogaData.number,
|
|
156
|
+
name: yogaData.name,
|
|
157
|
+
endTime: yogaData.endTimeString,
|
|
158
|
+
auspicious: yogaData.auspicious,
|
|
159
|
+
nextYoga: yogaData.nextYoga
|
|
160
|
+
} : null,
|
|
161
|
+
|
|
162
|
+
karana: karanaData ? {
|
|
163
|
+
number: karanaData.number,
|
|
164
|
+
name: karanaData.name,
|
|
165
|
+
type: karanaData.type,
|
|
166
|
+
endTime: karanaData.endTimeString,
|
|
167
|
+
isVishti: karanaData.isVishti
|
|
168
|
+
} : null,
|
|
169
|
+
|
|
170
|
+
vaara: vedicVaaraData ? {
|
|
171
|
+
number: vedicVaaraData.number,
|
|
172
|
+
name: vedicVaaraData.name,
|
|
173
|
+
nameSanskrit: vedicVaaraData.nameSanskrit,
|
|
174
|
+
ruler: vedicVaaraData.planetaryRuler.name,
|
|
175
|
+
isBeforeSunrise: vedicVaaraData.isBeforeSunrise
|
|
176
|
+
} : null,
|
|
177
|
+
|
|
178
|
+
// Calendar
|
|
179
|
+
lunarMonth: lunarMonthData ? {
|
|
180
|
+
number: lunarMonthData.number,
|
|
181
|
+
name: lunarMonthData.fullName,
|
|
182
|
+
isAdhika: lunarMonthData.isAdhika,
|
|
183
|
+
isNija: lunarMonthData.isNija
|
|
184
|
+
} : null,
|
|
185
|
+
|
|
186
|
+
solarMonth: solarMonthData ? {
|
|
187
|
+
number: solarMonthData.number,
|
|
188
|
+
name: solarMonthData.name,
|
|
189
|
+
signName: solarMonthData.signName,
|
|
190
|
+
sunLongitude: solarMonthData.sunLongitude
|
|
191
|
+
} : null,
|
|
192
|
+
|
|
193
|
+
samvatsara: samvatsaraData ? {
|
|
194
|
+
number: samvatsaraData.number,
|
|
195
|
+
name: samvatsaraData.name,
|
|
196
|
+
year: samvatsaraData.year
|
|
197
|
+
} : null,
|
|
198
|
+
|
|
199
|
+
// Muhurtas
|
|
200
|
+
muhurtas: {
|
|
201
|
+
raahuKaalam: raahuKaalam ? {
|
|
202
|
+
start: raahuKaalam.startString,
|
|
203
|
+
end: raahuKaalam.endString
|
|
204
|
+
} : null,
|
|
205
|
+
yamagandaKaalam: yamagandaKaalam ? {
|
|
206
|
+
start: yamagandaKaalam.startString,
|
|
207
|
+
end: yamagandaKaalam.endString
|
|
208
|
+
} : null,
|
|
209
|
+
gulikaiKaalam: gulikaiKaalam ? {
|
|
210
|
+
start: gulikaiKaalam.startString,
|
|
211
|
+
end: gulikaiKaalam.endString
|
|
212
|
+
} : null,
|
|
213
|
+
abhijitMuhurta: abhijitMuhurta ? {
|
|
214
|
+
start: abhijitMuhurta.startString,
|
|
215
|
+
end: abhijitMuhurta.endString
|
|
216
|
+
} : null,
|
|
217
|
+
brahmaMuhurta: brahmaMuhurta ? {
|
|
218
|
+
start: brahmaMuhurta.startString,
|
|
219
|
+
end: brahmaMuhurta.endString
|
|
220
|
+
} : null,
|
|
221
|
+
durmuhurtam: durmuhurtamData.map(d => ({
|
|
222
|
+
start: d.startString,
|
|
223
|
+
end: d.endString
|
|
224
|
+
}))
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Get Panchanga for a specific Julian Day
|
|
231
|
+
* @param {number} jd - Julian Day Number
|
|
232
|
+
* @param {object} place - {latitude, longitude, timezone}
|
|
233
|
+
* @returns {object} Panchanga data
|
|
234
|
+
*/
|
|
235
|
+
function getPanchangaForJD(jd, place) {
|
|
236
|
+
const dateInfo = utils.jdToDate(jd);
|
|
237
|
+
return calculatePanchanga({
|
|
238
|
+
year: dateInfo.year,
|
|
239
|
+
month: dateInfo.month,
|
|
240
|
+
date: Math.floor(dateInfo.day),
|
|
241
|
+
hour: Math.floor(dateInfo.hour),
|
|
242
|
+
min: Math.floor((dateInfo.hour % 1) * 60),
|
|
243
|
+
sec: 0,
|
|
244
|
+
lat: place.latitude,
|
|
245
|
+
lng: place.longitude,
|
|
246
|
+
timezone: place.timezone
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Export all functions and constants
|
|
251
|
+
module.exports = {
|
|
252
|
+
// Main calculation
|
|
253
|
+
calculatePanchanga,
|
|
254
|
+
getPanchangaForJD,
|
|
255
|
+
|
|
256
|
+
// Constants
|
|
257
|
+
...constants,
|
|
258
|
+
|
|
259
|
+
// Utils
|
|
260
|
+
dateToJD: utils.dateToJD,
|
|
261
|
+
jdToDate: utils.jdToDate,
|
|
262
|
+
norm360: utils.norm360,
|
|
263
|
+
formatTime: utils.formatTime,
|
|
264
|
+
|
|
265
|
+
// Sunrise/Sunset
|
|
266
|
+
sunrise: sunriseSunset.sunrise,
|
|
267
|
+
sunset: sunriseSunset.sunset,
|
|
268
|
+
moonrise: sunriseSunset.moonrise,
|
|
269
|
+
moonset: sunriseSunset.moonset,
|
|
270
|
+
midday: sunriseSunset.midday,
|
|
271
|
+
midnight: sunriseSunset.midnight,
|
|
272
|
+
dayLength: sunriseSunset.dayLength,
|
|
273
|
+
nightLength: sunriseSunset.nightLength,
|
|
274
|
+
solarLongitude: sunriseSunset.solarLongitude,
|
|
275
|
+
lunarLongitude: sunriseSunset.lunarLongitude,
|
|
276
|
+
|
|
277
|
+
// Tithi
|
|
278
|
+
tithi: tithiModule.tithi,
|
|
279
|
+
lunarPhase: tithiModule.lunarPhase,
|
|
280
|
+
newMoon: tithiModule.newMoon,
|
|
281
|
+
fullMoon: tithiModule.fullMoon,
|
|
282
|
+
quickTithi: tithiModule.quickTithi,
|
|
283
|
+
|
|
284
|
+
// Nakshatra
|
|
285
|
+
nakshatra: nakshatraModule.nakshatra,
|
|
286
|
+
nakshatraPada: nakshatraModule.nakshatraPada,
|
|
287
|
+
quickNakshatra: nakshatraModule.quickNakshatra,
|
|
288
|
+
nakshatraLord: nakshatraModule.nakshatraLord,
|
|
289
|
+
|
|
290
|
+
// Yoga
|
|
291
|
+
yogam: yogamModule.yogam,
|
|
292
|
+
yogaPhase: yogamModule.yogaPhase,
|
|
293
|
+
isAuspiciousYoga: yogamModule.isAuspiciousYoga,
|
|
294
|
+
|
|
295
|
+
// Karana
|
|
296
|
+
karana: karanaModule.karana,
|
|
297
|
+
karanaFromTithi: karanaModule.karanaFromTithi,
|
|
298
|
+
isVishti: karanaModule.isVishti,
|
|
299
|
+
|
|
300
|
+
// Vaara
|
|
301
|
+
vaara: vaaraModule.vaara,
|
|
302
|
+
vedicVaara: vaaraModule.vedicVaara,
|
|
303
|
+
|
|
304
|
+
// Lunar Calendar
|
|
305
|
+
lunarMonth: lunarCalendar.lunarMonth,
|
|
306
|
+
lunarDate: lunarCalendar.lunarDate,
|
|
307
|
+
eraYears: lunarCalendar.eraYears,
|
|
308
|
+
ritu: lunarCalendar.ritu,
|
|
309
|
+
|
|
310
|
+
// Solar Calendar
|
|
311
|
+
raasi: solarCalendar.raasi,
|
|
312
|
+
tamilSolarMonthAndDate: solarCalendar.tamilSolarMonthAndDate,
|
|
313
|
+
samvatsara: solarCalendar.samvatsara,
|
|
314
|
+
previousSankranti: solarCalendar.previousSankranti,
|
|
315
|
+
nextSankranti: solarCalendar.nextSankranti,
|
|
316
|
+
|
|
317
|
+
// Muhurtas
|
|
318
|
+
trikalam: muhurtas.trikalam,
|
|
319
|
+
raahuKaalam: muhurtas.raahuKaalam,
|
|
320
|
+
yamagandaKaalam: muhurtas.yamagandaKaalam,
|
|
321
|
+
gulikaiKaalam: muhurtas.gulikaiKaalam,
|
|
322
|
+
abhijitMuhurta: muhurtas.abhijitMuhurta,
|
|
323
|
+
durmuhurtam: muhurtas.durmuhurtam,
|
|
324
|
+
brahmaMuhurta: muhurtas.brahmaMuhurta,
|
|
325
|
+
godhuliMuhurta: muhurtas.godhuliMuhurta,
|
|
326
|
+
vijayaMuhurta: muhurtas.vijayaMuhurta,
|
|
327
|
+
gauriChoghadiya: muhurtas.gauriChoghadiya,
|
|
328
|
+
amritKaalam: muhurtas.amritKaalam,
|
|
329
|
+
sandhyaPeriods: muhurtas.sandhyaPeriods
|
|
330
|
+
};
|