mingpan 0.1.1
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/LICENSE +201 -0
- package/README.md +118 -0
- package/dist/core/bazi/BaziCore.d.ts +112 -0
- package/dist/core/bazi/BaziCore.d.ts.map +1 -0
- package/dist/core/bazi/BaziCore.js +606 -0
- package/dist/core/bazi/BaziCore.js.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts +46 -0
- package/dist/core/bazi/SolarTermCalculator.d.ts.map +1 -0
- package/dist/core/bazi/SolarTermCalculator.js +452 -0
- package/dist/core/bazi/SolarTermCalculator.js.map +1 -0
- package/dist/core/bazi/TrueSolarTime.d.ts +64 -0
- package/dist/core/bazi/TrueSolarTime.d.ts.map +1 -0
- package/dist/core/bazi/TrueSolarTime.js +210 -0
- package/dist/core/bazi/TrueSolarTime.js.map +1 -0
- package/dist/core/bazi/ephemerisData.d.ts +10 -0
- package/dist/core/bazi/ephemerisData.d.ts.map +1 -0
- package/dist/core/bazi/ephemerisData.js +88 -0
- package/dist/core/bazi/ephemerisData.js.map +1 -0
- package/dist/core/bazi/index.d.ts +8 -0
- package/dist/core/bazi/index.d.ts.map +1 -0
- package/dist/core/bazi/index.js +30 -0
- package/dist/core/bazi/index.js.map +1 -0
- package/dist/core/bazi/types.d.ts +116 -0
- package/dist/core/bazi/types.d.ts.map +1 -0
- package/dist/core/bazi/types.js +7 -0
- package/dist/core/bazi/types.js.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts +33 -0
- package/dist/core/calendar/SolarTermsCalculator.d.ts.map +1 -0
- package/dist/core/calendar/SolarTermsCalculator.js +111 -0
- package/dist/core/calendar/SolarTermsCalculator.js.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts +74 -0
- package/dist/core/calendar/astronomicalCalendar.d.ts.map +1 -0
- package/dist/core/calendar/astronomicalCalendar.js +276 -0
- package/dist/core/calendar/astronomicalCalendar.js.map +1 -0
- package/dist/core/calendar/calendar.d.ts +81 -0
- package/dist/core/calendar/calendar.d.ts.map +1 -0
- package/dist/core/calendar/calendar.js +223 -0
- package/dist/core/calendar/calendar.js.map +1 -0
- package/dist/core/calendar/constants.d.ts +151 -0
- package/dist/core/calendar/constants.d.ts.map +1 -0
- package/dist/core/calendar/constants.js +97 -0
- package/dist/core/calendar/constants.js.map +1 -0
- package/dist/core/calendar/julian.d.ts +54 -0
- package/dist/core/calendar/julian.d.ts.map +1 -0
- package/dist/core/calendar/julian.js +142 -0
- package/dist/core/calendar/julian.js.map +1 -0
- package/dist/core/calendar/lunarCalendar.d.ts +79 -0
- package/dist/core/calendar/lunarCalendar.d.ts.map +1 -0
- package/dist/core/calendar/lunarCalendar.js +164 -0
- package/dist/core/calendar/lunarCalendar.js.map +1 -0
- package/dist/core/calendar/solarTerms.d.ts +105 -0
- package/dist/core/calendar/solarTerms.d.ts.map +1 -0
- package/dist/core/calendar/solarTerms.js +487 -0
- package/dist/core/calendar/solarTerms.js.map +1 -0
- package/dist/core/constants/bazi.d.ts +138 -0
- package/dist/core/constants/bazi.d.ts.map +1 -0
- package/dist/core/constants/bazi.js +332 -0
- package/dist/core/constants/bazi.js.map +1 -0
- package/dist/core/constants/index.d.ts +6 -0
- package/dist/core/constants/index.d.ts.map +1 -0
- package/dist/core/constants/index.js +37 -0
- package/dist/core/constants/index.js.map +1 -0
- package/dist/core/constants/positions.d.ts +27 -0
- package/dist/core/constants/positions.d.ts.map +1 -0
- package/dist/core/constants/positions.js +39 -0
- package/dist/core/constants/positions.js.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts +53 -0
- package/dist/core/ziwei/BrightnessSystem.d.ts.map +1 -0
- package/dist/core/ziwei/BrightnessSystem.js +278 -0
- package/dist/core/ziwei/BrightnessSystem.js.map +1 -0
- package/dist/core/ziwei/IztroAdapter.d.ts +78 -0
- package/dist/core/ziwei/IztroAdapter.d.ts.map +1 -0
- package/dist/core/ziwei/IztroAdapter.js +314 -0
- package/dist/core/ziwei/IztroAdapter.js.map +1 -0
- package/dist/core/ziwei/MutagenCore.d.ts +81 -0
- package/dist/core/ziwei/MutagenCore.d.ts.map +1 -0
- package/dist/core/ziwei/MutagenCore.js +246 -0
- package/dist/core/ziwei/MutagenCore.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1101 -0
- package/dist/index.js.map +1 -0
- package/dist/output/fortuneTextRenderer.d.ts +63 -0
- package/dist/output/fortuneTextRenderer.d.ts.map +1 -0
- package/dist/output/fortuneTextRenderer.js +384 -0
- package/dist/output/fortuneTextRenderer.js.map +1 -0
- package/dist/output/listTextRenderer.d.ts +298 -0
- package/dist/output/listTextRenderer.d.ts.map +1 -0
- package/dist/output/listTextRenderer.js +942 -0
- package/dist/output/listTextRenderer.js.map +1 -0
- package/dist/services/bazi/BaziService.d.ts +83 -0
- package/dist/services/bazi/BaziService.d.ts.map +1 -0
- package/dist/services/bazi/BaziService.js +635 -0
- package/dist/services/bazi/BaziService.js.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts +31 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js +194 -0
- package/dist/services/bazi/analyzers/ClimateAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts +16 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js +60 -0
- package/dist/services/bazi/analyzers/HiddenStemsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts +33 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js +209 -0
- package/dist/services/bazi/analyzers/NaYinAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts +159 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js +1150 -0
- package/dist/services/bazi/analyzers/PatternAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts +114 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js +704 -0
- package/dist/services/bazi/analyzers/RelationsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts +236 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js +2079 -0
- package/dist/services/bazi/analyzers/ShenShaAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts +181 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js +1119 -0
- package/dist/services/bazi/analyzers/StrengthAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts +78 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js +383 -0
- package/dist/services/bazi/analyzers/TenGodsAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts +46 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js +260 -0
- package/dist/services/bazi/analyzers/TraditionalAnalyzer.js.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts +70 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.d.ts.map +1 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js +858 -0
- package/dist/services/bazi/analyzers/YongShenAnalyzer.js.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts +71 -0
- package/dist/services/bazi/calculators/DaYunCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js +496 -0
- package/dist/services/bazi/calculators/DaYunCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts +88 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js +546 -0
- package/dist/services/bazi/calculators/LiuNianCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts +66 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js +497 -0
- package/dist/services/bazi/calculators/LiuRiCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts +50 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js +338 -0
- package/dist/services/bazi/calculators/LiuYueCalculator.js.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts +123 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.d.ts.map +1 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js +414 -0
- package/dist/services/bazi/calculators/LuckCycleCalculator.js.map +1 -0
- package/dist/services/bazi/index.d.ts +21 -0
- package/dist/services/bazi/index.d.ts.map +1 -0
- package/dist/services/bazi/index.js +83 -0
- package/dist/services/bazi/index.js.map +1 -0
- package/dist/services/bazi/types.d.ts +597 -0
- package/dist/services/bazi/types.d.ts.map +1 -0
- package/dist/services/bazi/types.js +123 -0
- package/dist/services/bazi/types.js.map +1 -0
- package/dist/services/ziwei/ZiweiService.d.ts +86 -0
- package/dist/services/ziwei/ZiweiService.d.ts.map +1 -0
- package/dist/services/ziwei/ZiweiService.js +343 -0
- package/dist/services/ziwei/ZiweiService.js.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts +38 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js +142 -0
- package/dist/services/ziwei/calculators/BrightnessCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts +27 -0
- package/dist/services/ziwei/calculators/DailyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js +55 -0
- package/dist/services/ziwei/calculators/DailyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts +46 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js +181 -0
- package/dist/services/ziwei/calculators/DecadeCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts +28 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js +84 -0
- package/dist/services/ziwei/calculators/HoroscopeStarsCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts +41 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js +139 -0
- package/dist/services/ziwei/calculators/HourlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts +30 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js +90 -0
- package/dist/services/ziwei/calculators/MinorLimitCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts +39 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js +128 -0
- package/dist/services/ziwei/calculators/MonthlyCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts +20 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js +121 -0
- package/dist/services/ziwei/calculators/MutagenCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js +55 -0
- package/dist/services/ziwei/calculators/PalaceDynamicCalculator.js.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts +35 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.d.ts.map +1 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js +119 -0
- package/dist/services/ziwei/calculators/YearlyCalculator.js.map +1 -0
- package/dist/services/ziwei/index.d.ts +15 -0
- package/dist/services/ziwei/index.d.ts.map +1 -0
- package/dist/services/ziwei/index.js +48 -0
- package/dist/services/ziwei/index.js.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts +62 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.d.ts.map +1 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js +153 -0
- package/dist/services/ziwei/transformers/PalaceTransformer.js.map +1 -0
- package/dist/services/ziwei/types.d.ts +185 -0
- package/dist/services/ziwei/types.d.ts.map +1 -0
- package/dist/services/ziwei/types.js +54 -0
- package/dist/services/ziwei/types.js.map +1 -0
- package/dist/shared/logger.d.ts +51 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +136 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/types.d.ts +91 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +7 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/utils/ageCalculator.d.ts +30 -0
- package/dist/utils/ageCalculator.d.ts.map +1 -0
- package/dist/utils/ageCalculator.js +51 -0
- package/dist/utils/ageCalculator.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* True Solar Time Calculator
|
|
4
|
+
* Enhanced with high-precision astronomical calculations from taro-bazi
|
|
5
|
+
* Implements algorithms from 寿星万年历 (Longevity Star Calendar)
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.TrueSolarTime = void 0;
|
|
9
|
+
const astronomicalCalendar_1 = require("../calendar/astronomicalCalendar");
|
|
10
|
+
class TrueSolarTime {
|
|
11
|
+
/**
|
|
12
|
+
* Adjust clock time to true solar time with astronomical precision
|
|
13
|
+
* @param date - The clock time
|
|
14
|
+
* @param longitude - The longitude in degrees (positive for East, negative for West)
|
|
15
|
+
* @returns Adjusted date/time
|
|
16
|
+
*/
|
|
17
|
+
static adjust(date, longitude) {
|
|
18
|
+
// Convert to Julian Day for astronomical calculations
|
|
19
|
+
const jd = (0, astronomicalCalendar_1.gregorianToJulianDay)(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
20
|
+
// Calculate precise equation of time
|
|
21
|
+
const equationOfTime = this.getEquationOfTime(jd);
|
|
22
|
+
// Beijing standard time is UTC+8, based on 120°E longitude
|
|
23
|
+
const standardLongitude = 120;
|
|
24
|
+
// Calculate time difference in minutes
|
|
25
|
+
// Every degree of longitude = 4 minutes of time
|
|
26
|
+
const timeDifferenceMinutes = (longitude - standardLongitude) * 4;
|
|
27
|
+
// Total correction in minutes
|
|
28
|
+
const totalCorrectionMinutes = timeDifferenceMinutes + equationOfTime;
|
|
29
|
+
// Create new date with adjustment
|
|
30
|
+
const adjustedTime = new Date(date.getTime() + totalCorrectionMinutes * 60 * 1000);
|
|
31
|
+
return adjustedTime;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Calculate the equation of time with high precision
|
|
35
|
+
* This accounts for the Earth's elliptical orbit and axial tilt
|
|
36
|
+
* @param jd - Julian Day number
|
|
37
|
+
* @returns Correction in minutes
|
|
38
|
+
*/
|
|
39
|
+
static getEquationOfTime(jd) {
|
|
40
|
+
// Calculate centuries from J2000.0
|
|
41
|
+
const T = (jd - 2451545.0) / 36525.0;
|
|
42
|
+
const T2 = T * T;
|
|
43
|
+
const T3 = T2 * T;
|
|
44
|
+
// Mean longitude of the Sun
|
|
45
|
+
const L0 = 280.46646 + 36000.76983 * T + 0.0003032 * T2;
|
|
46
|
+
// Mean anomaly of the Sun
|
|
47
|
+
const M = 357.52911 + 35999.05029 * T - 0.0001537 * T2;
|
|
48
|
+
// Eccentricity of Earth's orbit
|
|
49
|
+
const e = 0.016708634 - 0.000042037 * T - 0.0000001267 * T2;
|
|
50
|
+
// Convert to radians
|
|
51
|
+
const MRad = M * Math.PI / 180;
|
|
52
|
+
const L0Rad = L0 * Math.PI / 180;
|
|
53
|
+
// Obliquity of the ecliptic
|
|
54
|
+
const epsilon = 23.43929111 - 0.013004167 * T - 0.000000164 * T2 + 0.000000503 * T3;
|
|
55
|
+
const y = Math.tan(0.5 * epsilon * Math.PI / 180) ** 2;
|
|
56
|
+
// Equation of time
|
|
57
|
+
const E = y * Math.sin(2 * L0Rad)
|
|
58
|
+
- 2 * e * Math.sin(MRad)
|
|
59
|
+
+ 4 * e * y * Math.sin(MRad) * Math.cos(2 * L0Rad)
|
|
60
|
+
- 0.5 * y * y * Math.sin(4 * L0Rad)
|
|
61
|
+
- 1.25 * e * e * Math.sin(2 * MRad);
|
|
62
|
+
// Convert from radians to minutes
|
|
63
|
+
return E * 180 / Math.PI * 4;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the day of year (1-365/366)
|
|
67
|
+
*/
|
|
68
|
+
static getDayOfYear(date) {
|
|
69
|
+
const start = new Date(date.getFullYear(), 0, 0);
|
|
70
|
+
const diff = date.getTime() - start.getTime();
|
|
71
|
+
const dayOfYear = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
72
|
+
return dayOfYear;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Calculate sunrise time with astronomical precision
|
|
76
|
+
* @param date - The date
|
|
77
|
+
* @param latitude - Latitude in degrees (positive for North)
|
|
78
|
+
* @param longitude - Longitude in degrees (positive for East)
|
|
79
|
+
* @returns Sunrise time
|
|
80
|
+
*/
|
|
81
|
+
static calculateSunrise(date, latitude, longitude) {
|
|
82
|
+
// Convert to Julian Day at noon
|
|
83
|
+
const jdNoon = (0, astronomicalCalendar_1.gregorianToJulianDay)(date.getFullYear(), date.getMonth() + 1, date.getDate(), 12, 0, 0);
|
|
84
|
+
// Get solar longitude
|
|
85
|
+
const solarLongitude = (0, astronomicalCalendar_1.getSolarLongitude)(jdNoon);
|
|
86
|
+
// Calculate solar declination
|
|
87
|
+
const obliquity = 23.43929111; // Earth's axial tilt
|
|
88
|
+
const declinationRad = Math.asin(Math.sin(solarLongitude * Math.PI / 180) *
|
|
89
|
+
Math.sin(obliquity * Math.PI / 180));
|
|
90
|
+
// Calculate hour angle at sunrise
|
|
91
|
+
const latRad = latitude * Math.PI / 180;
|
|
92
|
+
// Check for polar day/night
|
|
93
|
+
const cosH = -Math.tan(latRad) * Math.tan(declinationRad);
|
|
94
|
+
if (cosH > 1) {
|
|
95
|
+
// Polar night - no sunrise
|
|
96
|
+
return new Date(NaN);
|
|
97
|
+
}
|
|
98
|
+
if (cosH < -1) {
|
|
99
|
+
// Polar day - sun doesn't set
|
|
100
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
|
|
101
|
+
}
|
|
102
|
+
const hourAngleRad = Math.acos(cosH);
|
|
103
|
+
const hourAngleDeg = hourAngleRad * 180 / Math.PI;
|
|
104
|
+
// Time of solar noon (in hours)
|
|
105
|
+
const solarNoon = 12 - longitude / 15 + date.getTimezoneOffset() / 60;
|
|
106
|
+
// Sunrise time
|
|
107
|
+
const sunriseHour = solarNoon - hourAngleDeg / 15;
|
|
108
|
+
// Apply equation of time correction
|
|
109
|
+
const equationOfTime = this.getEquationOfTime(jdNoon);
|
|
110
|
+
const correctedSunriseHour = sunriseHour - equationOfTime / 60;
|
|
111
|
+
const sunriseDate = new Date(date);
|
|
112
|
+
sunriseDate.setHours(Math.floor(correctedSunriseHour));
|
|
113
|
+
sunriseDate.setMinutes(Math.floor((correctedSunriseHour % 1) * 60));
|
|
114
|
+
sunriseDate.setSeconds(0);
|
|
115
|
+
return sunriseDate;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Calculate sunset time with astronomical precision
|
|
119
|
+
* @param date - The date
|
|
120
|
+
* @param latitude - Latitude in degrees
|
|
121
|
+
* @param longitude - Longitude in degrees
|
|
122
|
+
* @returns Sunset time
|
|
123
|
+
*/
|
|
124
|
+
static calculateSunset(date, latitude, longitude) {
|
|
125
|
+
// Similar to sunrise but add the hour angle instead of subtracting
|
|
126
|
+
const jdNoon = (0, astronomicalCalendar_1.gregorianToJulianDay)(date.getFullYear(), date.getMonth() + 1, date.getDate(), 12, 0, 0);
|
|
127
|
+
const solarLongitude = (0, astronomicalCalendar_1.getSolarLongitude)(jdNoon);
|
|
128
|
+
const obliquity = 23.43929111;
|
|
129
|
+
const declinationRad = Math.asin(Math.sin(solarLongitude * Math.PI / 180) *
|
|
130
|
+
Math.sin(obliquity * Math.PI / 180));
|
|
131
|
+
const latRad = latitude * Math.PI / 180;
|
|
132
|
+
const cosH = -Math.tan(latRad) * Math.tan(declinationRad);
|
|
133
|
+
if (cosH > 1) {
|
|
134
|
+
// Polar night
|
|
135
|
+
return new Date(NaN);
|
|
136
|
+
}
|
|
137
|
+
if (cosH < -1) {
|
|
138
|
+
// Polar day
|
|
139
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59);
|
|
140
|
+
}
|
|
141
|
+
const hourAngleRad = Math.acos(cosH);
|
|
142
|
+
const hourAngleDeg = hourAngleRad * 180 / Math.PI;
|
|
143
|
+
const solarNoon = 12 - longitude / 15 + date.getTimezoneOffset() / 60;
|
|
144
|
+
const sunsetHour = solarNoon + hourAngleDeg / 15;
|
|
145
|
+
const equationOfTime = this.getEquationOfTime(jdNoon);
|
|
146
|
+
const correctedSunsetHour = sunsetHour - equationOfTime / 60;
|
|
147
|
+
const sunsetDate = new Date(date);
|
|
148
|
+
sunsetDate.setHours(Math.floor(correctedSunsetHour));
|
|
149
|
+
sunsetDate.setMinutes(Math.floor((correctedSunsetHour % 1) * 60));
|
|
150
|
+
sunsetDate.setSeconds(0);
|
|
151
|
+
return sunsetDate;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Determine if a time is during daylight hours
|
|
155
|
+
* @param date - The date/time to check
|
|
156
|
+
* @param latitude - Latitude in degrees
|
|
157
|
+
* @param longitude - Longitude in degrees
|
|
158
|
+
* @returns true if during daylight hours
|
|
159
|
+
*/
|
|
160
|
+
static isDaylight(date, latitude, longitude) {
|
|
161
|
+
const sunrise = this.calculateSunrise(date, latitude, longitude);
|
|
162
|
+
const sunset = this.calculateSunset(date, latitude, longitude);
|
|
163
|
+
// Handle polar day/night cases
|
|
164
|
+
if (isNaN(sunrise.getTime()))
|
|
165
|
+
return false; // Polar night
|
|
166
|
+
if (sunrise.getHours() === 0 && sunset.getHours() === 23)
|
|
167
|
+
return true; // Polar day
|
|
168
|
+
return date >= sunrise && date <= sunset;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get timezone offset for a longitude
|
|
172
|
+
* @param longitude - Longitude in degrees
|
|
173
|
+
* @returns Timezone offset in hours from UTC
|
|
174
|
+
*/
|
|
175
|
+
static getTimezoneOffset(longitude) {
|
|
176
|
+
// Theoretical timezone based on longitude
|
|
177
|
+
// Actual timezones may differ due to political boundaries
|
|
178
|
+
return Math.round(longitude / 15);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Calculate the solar position (altitude and azimuth) for a given time and location
|
|
182
|
+
* Useful for advanced BaZi calculations that consider solar position
|
|
183
|
+
*/
|
|
184
|
+
static getSolarPosition(date, latitude, longitude) {
|
|
185
|
+
const jd = (0, astronomicalCalendar_1.gregorianToJulianDay)(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
186
|
+
// Get solar coordinates
|
|
187
|
+
const solarLongitude = (0, astronomicalCalendar_1.getSolarLongitude)(jd);
|
|
188
|
+
const obliquity = 23.43929111;
|
|
189
|
+
// Right ascension and declination
|
|
190
|
+
const alpha = Math.atan2(Math.cos(obliquity * Math.PI / 180) * Math.sin(solarLongitude * Math.PI / 180), Math.cos(solarLongitude * Math.PI / 180));
|
|
191
|
+
const delta = Math.asin(Math.sin(obliquity * Math.PI / 180) * Math.sin(solarLongitude * Math.PI / 180));
|
|
192
|
+
// Local sidereal time
|
|
193
|
+
const T = (jd - 2451545.0) / 36525.0;
|
|
194
|
+
const theta0 = 280.46061837 + 360.98564736629 * (jd - 2451545.0) + T * T * (0.000387933 - T / 38710000);
|
|
195
|
+
const theta = (theta0 + longitude) % 360;
|
|
196
|
+
// Hour angle
|
|
197
|
+
const H = (theta - alpha * 180 / Math.PI) * Math.PI / 180;
|
|
198
|
+
// Convert to horizontal coordinates
|
|
199
|
+
const latRad = latitude * Math.PI / 180;
|
|
200
|
+
const altitude = Math.asin(Math.sin(latRad) * Math.sin(delta) +
|
|
201
|
+
Math.cos(latRad) * Math.cos(delta) * Math.cos(H));
|
|
202
|
+
const azimuth = Math.atan2(Math.sin(H), Math.cos(H) * Math.sin(latRad) - Math.tan(delta) * Math.cos(latRad));
|
|
203
|
+
return {
|
|
204
|
+
altitude: altitude * 180 / Math.PI,
|
|
205
|
+
azimuth: ((azimuth * 180 / Math.PI + 360) % 360)
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
exports.TrueSolarTime = TrueSolarTime;
|
|
210
|
+
//# sourceMappingURL=TrueSolarTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrueSolarTime.js","sourceRoot":"","sources":["../../../src/core/bazi/TrueSolarTime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ephemeris Data for Solar Term Calculations
|
|
3
|
+
* This is a simplified version for demonstration
|
|
4
|
+
* In production, you would need the full astronomical data
|
|
5
|
+
*/
|
|
6
|
+
export declare const XL0_xzb: number[];
|
|
7
|
+
export declare const nutB: number[];
|
|
8
|
+
export declare const dt_at: number[];
|
|
9
|
+
export declare const XL0: number[][];
|
|
10
|
+
//# sourceMappingURL=ephemerisData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ephemerisData.d.ts","sourceRoot":"","sources":["../../../src/core/bazi/ephemerisData.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,eAAO,MAAM,OAAO,UAQnB,CAAC;AAGF,eAAO,MAAM,IAAI,UAWhB,CAAC;AAGF,eAAO,MAAM,KAAK,UAwBjB,CAAC;AAIF,eAAO,MAAM,GAAG,YA2Bf,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ephemeris Data for Solar Term Calculations
|
|
4
|
+
* This is a simplified version for demonstration
|
|
5
|
+
* In production, you would need the full astronomical data
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.XL0 = exports.dt_at = exports.nutB = exports.XL0_xzb = void 0;
|
|
9
|
+
// Planetary ephemeris correction table
|
|
10
|
+
exports.XL0_xzb = [
|
|
11
|
+
-0.08631, +0.00039, -0.00008, // Mercury
|
|
12
|
+
-0.07447, +0.00006, +0.00017, // Venus
|
|
13
|
+
-0.07135, -0.00026, -0.00176, // Mars
|
|
14
|
+
-0.20239, +0.00273, -0.00347, // Jupiter
|
|
15
|
+
-0.25486, +0.00276, +0.42926, // Saturn
|
|
16
|
+
+0.24588, +0.00345, -14.46266, // Uranus
|
|
17
|
+
-0.95116, +0.02481, +58.30651 // Neptune
|
|
18
|
+
];
|
|
19
|
+
// Medium precision nutation calculation table
|
|
20
|
+
exports.nutB = [
|
|
21
|
+
2.1824, -33.75705, 36e-6, -1720, 920,
|
|
22
|
+
3.5069, 1256.66393, 11e-6, -132, 57,
|
|
23
|
+
1.3375, 16799.4182, -51e-6, -23, 10,
|
|
24
|
+
4.3649, -67.5141, 72e-6, 21, -9,
|
|
25
|
+
0.04, -628.302, 0, -14, 0,
|
|
26
|
+
2.36, 8328.691, 0, 7, 0,
|
|
27
|
+
3.46, 1884.966, 0, -5, 2,
|
|
28
|
+
5.44, 16833.175, 0, -4, 2,
|
|
29
|
+
3.69, 25128.110, 0, -3, 0,
|
|
30
|
+
3.55, 628.362, 0, 2, 0
|
|
31
|
+
];
|
|
32
|
+
// TD - UT1 calculation table
|
|
33
|
+
exports.dt_at = [
|
|
34
|
+
-4000, 108371.7, -13036.80, 392.000, 0.0000,
|
|
35
|
+
-500, 17201.0, -627.82, 16.170, -0.3413,
|
|
36
|
+
-150, 12200.6, -346.41, 5.403, -0.1593,
|
|
37
|
+
150, 9113.8, -328.13, -1.647, 0.0377,
|
|
38
|
+
500, 5707.5, -391.41, 0.915, 0.3145,
|
|
39
|
+
900, 2203.4, -283.45, 13.034, -0.1778,
|
|
40
|
+
1300, 490.1, -57.35, 2.085, -0.0072,
|
|
41
|
+
1600, 120.0, -9.81, -1.532, 0.1403,
|
|
42
|
+
1700, 10.2, -0.91, 0.510, -0.0370,
|
|
43
|
+
1800, 13.4, -0.72, 0.202, -0.0193,
|
|
44
|
+
1830, 7.8, -1.81, 0.416, -0.0247,
|
|
45
|
+
1860, 8.3, -0.13, -0.406, 0.0292,
|
|
46
|
+
1880, -5.4, 0.32, -0.183, 0.0173,
|
|
47
|
+
1900, -2.3, 2.06, 0.169, -0.0135,
|
|
48
|
+
1920, 21.2, 1.69, -0.304, 0.0167,
|
|
49
|
+
1940, 24.2, 1.22, -0.064, 0.0031,
|
|
50
|
+
1960, 33.2, 0.51, 0.231, -0.0109,
|
|
51
|
+
1980, 51.0, 1.29, -0.026, 0.0032,
|
|
52
|
+
2000, 63.87, 0.1, 0, 0,
|
|
53
|
+
2005, 64.7, 0.21, 0, 0,
|
|
54
|
+
2012, 66.8, 0.22, 0, 0,
|
|
55
|
+
2018, 69.0, 0.36, 0, 0,
|
|
56
|
+
2028, 72.6
|
|
57
|
+
];
|
|
58
|
+
// Simplified XL0 data structure
|
|
59
|
+
// In production, this would be a much larger array with astronomical data
|
|
60
|
+
exports.XL0 = [
|
|
61
|
+
[
|
|
62
|
+
10000000000, // A multiplier
|
|
63
|
+
20, 578, 920, 1100, 1124, 1136, 1148, 1217, 1226, 1229, 1229, 1229, 1229, 1937, 2363, 2618, 2633, 2660, 2666,
|
|
64
|
+
// Position index table
|
|
65
|
+
/* L0 - Simplified data for demonstration */
|
|
66
|
+
17534704567, 0.00000000000, 0.00000000000,
|
|
67
|
+
334165646, 4.669256804, 6283.075849991,
|
|
68
|
+
3489428, 4.6261024, 12566.1517000,
|
|
69
|
+
349706, 2.744118, 5753.384885,
|
|
70
|
+
341757, 2.828866, 3.523118,
|
|
71
|
+
313590, 3.627670, 77713.771468,
|
|
72
|
+
267622, 4.418084, 7860.419392,
|
|
73
|
+
234269, 6.135162, 3930.209696,
|
|
74
|
+
132429, 0.742464, 11506.769770,
|
|
75
|
+
127317, 2.037097, 529.690965,
|
|
76
|
+
119917, 1.109629, 1577.343542,
|
|
77
|
+
99025, 5.23268, 5884.92685,
|
|
78
|
+
90186, 2.04505, 26.29832,
|
|
79
|
+
85722, 3.50849, 398.14900,
|
|
80
|
+
77979, 1.17883, 5223.69392,
|
|
81
|
+
75314, 2.53339, 5507.55324,
|
|
82
|
+
50526, 4.58293, 18849.22755,
|
|
83
|
+
49238, 4.20507, 775.52261,
|
|
84
|
+
35666, 2.91954, 0.06731,
|
|
85
|
+
31709, 5.84902, 11790.62909
|
|
86
|
+
]
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=ephemerisData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ephemerisData.js","sourceRoot":"","sources":["../../../src/core/bazi/ephemerisData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/bazi/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core BaZi Calculation Exports
|
|
4
|
+
* Central exports for all core BaZi calculation modules
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.TrueSolarTime = exports.BaziCore = void 0;
|
|
22
|
+
// Export all types
|
|
23
|
+
__exportStar(require("./types"), exports);
|
|
24
|
+
// Core calculator class
|
|
25
|
+
var BaziCore_1 = require("./BaziCore");
|
|
26
|
+
Object.defineProperty(exports, "BaziCore", { enumerable: true, get: function () { return BaziCore_1.BaziCore; } });
|
|
27
|
+
// Solar time calculations
|
|
28
|
+
var TrueSolarTime_1 = require("./TrueSolarTime");
|
|
29
|
+
Object.defineProperty(exports, "TrueSolarTime", { enumerable: true, get: function () { return TrueSolarTime_1.TrueSolarTime; } });
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/bazi/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,mBAAmB;AACnB,0CAAwB;AAExB,wBAAwB;AACxB,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AAEjB,0BAA0B;AAC1B,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core BaZi Types
|
|
3
|
+
* Domain models for BaZi calculations - language agnostic
|
|
4
|
+
*/
|
|
5
|
+
export interface Pillar {
|
|
6
|
+
stem: string;
|
|
7
|
+
branch: string;
|
|
8
|
+
hiddenStems?: HiddenStem[];
|
|
9
|
+
naYin?: string;
|
|
10
|
+
selfSitting?: string;
|
|
11
|
+
void?: boolean;
|
|
12
|
+
voidBranches?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface HiddenStem {
|
|
15
|
+
stem: string;
|
|
16
|
+
power: number;
|
|
17
|
+
isMain: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface BaziChart {
|
|
20
|
+
year: Pillar;
|
|
21
|
+
month: Pillar;
|
|
22
|
+
day: Pillar;
|
|
23
|
+
hour: Pillar;
|
|
24
|
+
}
|
|
25
|
+
export interface FiveElementsAnalysis {
|
|
26
|
+
木: number;
|
|
27
|
+
火: number;
|
|
28
|
+
土: number;
|
|
29
|
+
金: number;
|
|
30
|
+
水: number;
|
|
31
|
+
total: number;
|
|
32
|
+
balance: ElementBalance;
|
|
33
|
+
}
|
|
34
|
+
export interface ElementBalance {
|
|
35
|
+
strongest: string;
|
|
36
|
+
weakest: string;
|
|
37
|
+
missing: string[];
|
|
38
|
+
percentage?: Record<string, number>;
|
|
39
|
+
distribution?: '平衡' | '失衡' | '严重失衡';
|
|
40
|
+
}
|
|
41
|
+
export interface TwelveGrowthStage {
|
|
42
|
+
stage: string;
|
|
43
|
+
element: string;
|
|
44
|
+
branch: string;
|
|
45
|
+
meaning: string;
|
|
46
|
+
strength: number;
|
|
47
|
+
power?: number;
|
|
48
|
+
state?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface NaYinInfo {
|
|
51
|
+
name: string;
|
|
52
|
+
element: string;
|
|
53
|
+
meaning: string;
|
|
54
|
+
}
|
|
55
|
+
export interface LunarDate {
|
|
56
|
+
year: number;
|
|
57
|
+
month: number;
|
|
58
|
+
day: number;
|
|
59
|
+
hour: number;
|
|
60
|
+
isLeapMonth: boolean;
|
|
61
|
+
monthName?: string;
|
|
62
|
+
dayName?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface BaziCoreInput {
|
|
65
|
+
year: number;
|
|
66
|
+
month: number;
|
|
67
|
+
day: number;
|
|
68
|
+
hour: number;
|
|
69
|
+
minute?: number;
|
|
70
|
+
gender?: 'male' | 'female';
|
|
71
|
+
isLunar?: boolean;
|
|
72
|
+
timezone?: string;
|
|
73
|
+
longitude?: number;
|
|
74
|
+
}
|
|
75
|
+
export interface BaziCoreResult {
|
|
76
|
+
chart: BaziChart;
|
|
77
|
+
birthInfo: {
|
|
78
|
+
solar: Date;
|
|
79
|
+
lunar: LunarDate;
|
|
80
|
+
trueSolarTime?: Date;
|
|
81
|
+
solarTerm?: string;
|
|
82
|
+
adjacentSolarTermTime?: {
|
|
83
|
+
previous: string;
|
|
84
|
+
next: string;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
zodiac: string;
|
|
88
|
+
dayMasterElement: string;
|
|
89
|
+
naYin: NaYinInfo;
|
|
90
|
+
fiveElements: FiveElementsAnalysis;
|
|
91
|
+
voidBranches?: string[];
|
|
92
|
+
twelveGrowthStages?: TwelveGrowthStage[];
|
|
93
|
+
}
|
|
94
|
+
export interface ElementStrength {
|
|
95
|
+
element: string;
|
|
96
|
+
state: string;
|
|
97
|
+
count: number;
|
|
98
|
+
percentage: number;
|
|
99
|
+
stemSupport: number;
|
|
100
|
+
branchSupport: number;
|
|
101
|
+
strength: number;
|
|
102
|
+
totalScore: number;
|
|
103
|
+
}
|
|
104
|
+
export interface ElementBalanceAnalysis {
|
|
105
|
+
supportingElements: string[];
|
|
106
|
+
suppressingElements: string[];
|
|
107
|
+
dominantElement: string;
|
|
108
|
+
weakestElement: string;
|
|
109
|
+
balanced: boolean;
|
|
110
|
+
balance: '平衡' | '失衡' | '高度失衡';
|
|
111
|
+
analysis: string;
|
|
112
|
+
dominant?: string;
|
|
113
|
+
lacking?: string;
|
|
114
|
+
suggestions: string[];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/bazi/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/bazi/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 節氣計算器
|
|
3
|
+
* 用於確定日期所屬的節氣月份
|
|
4
|
+
*/
|
|
5
|
+
export interface SolarTermInfo {
|
|
6
|
+
termIndex: number;
|
|
7
|
+
termName: string;
|
|
8
|
+
termDate: Date;
|
|
9
|
+
nextTerm: string;
|
|
10
|
+
nextTermDate: Date;
|
|
11
|
+
}
|
|
12
|
+
export declare class SolarTermsCalculator {
|
|
13
|
+
private static readonly SOLAR_TERMS;
|
|
14
|
+
private static readonly BASE_MINUTES_2000;
|
|
15
|
+
/**
|
|
16
|
+
* 獲取指定日期所屬的節氣月份
|
|
17
|
+
*/
|
|
18
|
+
static getSolarTermMonth(year: number, month: number, day: number): SolarTermInfo;
|
|
19
|
+
/**
|
|
20
|
+
* 計算指定年份的所有節氣日期
|
|
21
|
+
* 使用簡化算法,實際應用中應該使用更精確的天文算法
|
|
22
|
+
*/
|
|
23
|
+
private static calculateYearSolarTerms;
|
|
24
|
+
/**
|
|
25
|
+
* 判斷某個日期是否是節氣日
|
|
26
|
+
*/
|
|
27
|
+
static isSolarTermDay(year: number, month: number, day: number): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* 獲取節氣名稱
|
|
30
|
+
*/
|
|
31
|
+
static getSolarTermName(index: number): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=SolarTermsCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolarTermsCalculator.d.ts","sourceRoot":"","sources":["../../../src/core/calendar/SolarTermsCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAE/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAKjC;IAIF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAKvC;IAEF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa;IAiCjF;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IA2CtC;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAUxE;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAG/C"}
|