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,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 節氣計算器
|
|
4
|
+
* 用於確定日期所屬的節氣月份
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SolarTermsCalculator = void 0;
|
|
8
|
+
class SolarTermsCalculator {
|
|
9
|
+
// 24節氣名稱
|
|
10
|
+
static SOLAR_TERMS = [
|
|
11
|
+
'立春', '雨水', '驚蟄', '春分', '清明', '穀雨',
|
|
12
|
+
'立夏', '小滿', '芒種', '夏至', '小暑', '大暑',
|
|
13
|
+
'立秋', '處暑', '白露', '秋分', '寒露', '霜降',
|
|
14
|
+
'立冬', '小雪', '大雪', '冬至', '小寒', '大寒'
|
|
15
|
+
];
|
|
16
|
+
// 節氣基準數據(2000年的節氣時刻,單位:分鐘)
|
|
17
|
+
// 這是簡化版本,實際應該使用更精確的天文算法
|
|
18
|
+
static BASE_MINUTES_2000 = [
|
|
19
|
+
318663, 333795, 349066, 364618, 380057, 395317,
|
|
20
|
+
410841, 426569, 442303, 458174, 473964, 489528,
|
|
21
|
+
504978, 520435, 535914, 551476, 567087, 582633,
|
|
22
|
+
598067, 613506, 628960, 644509, 660096, 675611
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* 獲取指定日期所屬的節氣月份
|
|
26
|
+
*/
|
|
27
|
+
static getSolarTermMonth(year, month, day) {
|
|
28
|
+
const date = new Date(year, month - 1, day);
|
|
29
|
+
// 計算該年的所有節氣日期
|
|
30
|
+
const solarTermDates = this.calculateYearSolarTerms(year);
|
|
31
|
+
// 找出日期所屬的節氣區間
|
|
32
|
+
for (let i = 0; i < solarTermDates.length; i++) {
|
|
33
|
+
const currentTerm = solarTermDates[i];
|
|
34
|
+
const nextTerm = solarTermDates[(i + 1) % 24];
|
|
35
|
+
const nextTermDate = i < 23 ? nextTerm.date : this.calculateYearSolarTerms(year + 1)[0].date;
|
|
36
|
+
if (date >= currentTerm.date && date < nextTermDate) {
|
|
37
|
+
return {
|
|
38
|
+
termIndex: i,
|
|
39
|
+
termName: currentTerm.name,
|
|
40
|
+
termDate: currentTerm.date,
|
|
41
|
+
nextTerm: nextTerm.name,
|
|
42
|
+
nextTermDate: nextTermDate
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 如果日期在大寒之後,屬於下一年的立春
|
|
47
|
+
return {
|
|
48
|
+
termIndex: 0,
|
|
49
|
+
termName: '立春',
|
|
50
|
+
termDate: this.calculateYearSolarTerms(year + 1)[0].date,
|
|
51
|
+
nextTerm: '雨水',
|
|
52
|
+
nextTermDate: this.calculateYearSolarTerms(year + 1)[1].date
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 計算指定年份的所有節氣日期
|
|
57
|
+
* 使用簡化算法,實際應用中應該使用更精確的天文算法
|
|
58
|
+
*/
|
|
59
|
+
static calculateYearSolarTerms(year) {
|
|
60
|
+
const terms = [];
|
|
61
|
+
// 簡化算法:基於經驗公式計算節氣日期
|
|
62
|
+
// 實際應該使用天文算法或查表
|
|
63
|
+
const yearDiff = year - 2000;
|
|
64
|
+
const leapYears = Math.floor(yearDiff / 4) - Math.floor(yearDiff / 100) + Math.floor(yearDiff / 400);
|
|
65
|
+
for (let i = 0; i < 24; i++) {
|
|
66
|
+
// 基準分鐘數 + 年份調整
|
|
67
|
+
const baseMinutes = this.BASE_MINUTES_2000[i];
|
|
68
|
+
const adjustedMinutes = baseMinutes + yearDiff * 365.2422 * 24 * 60 / 24;
|
|
69
|
+
// 轉換為日期
|
|
70
|
+
const termDate = new Date(2000, 0, 1);
|
|
71
|
+
termDate.setMinutes(termDate.getMinutes() + adjustedMinutes);
|
|
72
|
+
// 根據節氣索引調整日期(這是簡化版本)
|
|
73
|
+
const month = Math.floor(i / 2);
|
|
74
|
+
const isFirstHalf = i % 2 === 0;
|
|
75
|
+
// 節氣通常在每月的5-7日(節)和20-22日(氣)
|
|
76
|
+
const day = isFirstHalf ?
|
|
77
|
+
(4 + Math.round((year - 2000) * 0.242)) :
|
|
78
|
+
(19 + Math.round((year - 2000) * 0.242));
|
|
79
|
+
const actualDate = new Date(year, month, day);
|
|
80
|
+
// 微調:立春通常在2月3-5日
|
|
81
|
+
if (i === 0) {
|
|
82
|
+
actualDate.setMonth(1);
|
|
83
|
+
actualDate.setDate(4);
|
|
84
|
+
}
|
|
85
|
+
terms.push({
|
|
86
|
+
name: this.SOLAR_TERMS[i],
|
|
87
|
+
date: actualDate
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return terms;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 判斷某個日期是否是節氣日
|
|
94
|
+
*/
|
|
95
|
+
static isSolarTermDay(year, month, day) {
|
|
96
|
+
const terms = this.calculateYearSolarTerms(year);
|
|
97
|
+
const dateStr = `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
|
|
98
|
+
return terms.some(term => {
|
|
99
|
+
const termDateStr = `${term.date.getFullYear()}-${String(term.date.getMonth() + 1).padStart(2, '0')}-${String(term.date.getDate()).padStart(2, '0')}`;
|
|
100
|
+
return termDateStr === dateStr;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 獲取節氣名稱
|
|
105
|
+
*/
|
|
106
|
+
static getSolarTermName(index) {
|
|
107
|
+
return this.SOLAR_TERMS[index] || '';
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.SolarTermsCalculator = SolarTermsCalculator;
|
|
111
|
+
//# sourceMappingURL=SolarTermsCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolarTermsCalculator.js","sourceRoot":"","sources":["../../../src/core/calendar/SolarTermsCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Astronomical Calendar Calculations
|
|
3
|
+
* Based on taro-bazi's high-precision algorithms
|
|
4
|
+
* Implements calculations from 寿星万年历 (Longevity Star Calendar)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert Gregorian date to Julian Day Number
|
|
8
|
+
* Valid from 100 CE onwards
|
|
9
|
+
*/
|
|
10
|
+
export declare function gregorianToJulianDay(year: number, month: number, day: number, hour?: number, minute?: number, second?: number): number;
|
|
11
|
+
/**
|
|
12
|
+
* Convert Julian Day Number to Gregorian date
|
|
13
|
+
*/
|
|
14
|
+
export declare function julianDayToGregorian(jd: number): {
|
|
15
|
+
year: number;
|
|
16
|
+
month: number;
|
|
17
|
+
day: number;
|
|
18
|
+
hour: number;
|
|
19
|
+
minute: number;
|
|
20
|
+
second: number;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Calculate Earth's nutation parameters
|
|
24
|
+
* Returns nutation in longitude (Δψ) and obliquity (Δε) in degrees
|
|
25
|
+
*/
|
|
26
|
+
export declare function getEarthNutationParameter(jd: number): {
|
|
27
|
+
longitude: number;
|
|
28
|
+
obliquity: number;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Calculate the aberration of light
|
|
32
|
+
* Returns correction in degrees
|
|
33
|
+
*/
|
|
34
|
+
export declare function getLightAberration(jd: number): number;
|
|
35
|
+
/**
|
|
36
|
+
* Calculate the apparent solar longitude
|
|
37
|
+
* Includes corrections for nutation and aberration
|
|
38
|
+
*/
|
|
39
|
+
export declare function getSolarLongitude(jd: number): number;
|
|
40
|
+
/**
|
|
41
|
+
* Find the exact moment of a solar term
|
|
42
|
+
* Uses Newton-Raphson iteration for precision
|
|
43
|
+
*/
|
|
44
|
+
export declare function findSolarTermTime(year: number, targetLongitude: number): Date;
|
|
45
|
+
/**
|
|
46
|
+
* Get all 24 solar terms for a given year
|
|
47
|
+
*/
|
|
48
|
+
export declare function getSolarTermsForYear(year: number): Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
date: Date;
|
|
51
|
+
longitude: number;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Calculate the precise moment of new moon
|
|
55
|
+
* Used for lunar calendar calculations
|
|
56
|
+
*/
|
|
57
|
+
export declare function getNewMoonTime(k: number): number;
|
|
58
|
+
/**
|
|
59
|
+
* Constants for precise calculations
|
|
60
|
+
*/
|
|
61
|
+
export declare const ASTRONOMICAL_CONSTANTS: {
|
|
62
|
+
J2000: number;
|
|
63
|
+
DAYS_PER_CENTURY: number;
|
|
64
|
+
MEAN_SOLAR_DAY: number;
|
|
65
|
+
SYNODIC_MONTH: number;
|
|
66
|
+
TROPICAL_YEAR: number;
|
|
67
|
+
ABERRATION_CONSTANT: number;
|
|
68
|
+
EARTH_OBLIQUITY_J2000: number;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Export utility function to check calculation validity
|
|
72
|
+
*/
|
|
73
|
+
export declare function isValidDate(year: number, month: number, day: number): boolean;
|
|
74
|
+
//# sourceMappingURL=astronomicalCalendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astronomicalCalendar.d.ts","sourceRoot":"","sources":["../../../src/core/calendar/astronomicalCalendar.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAU,EAChB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,GACjB,MAAM,CAoBR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAgCA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAsC9F;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAgBrD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CA+BpD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI,CA2B7E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BzG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CA4ChD;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;CAQlC,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAc7E"}
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Astronomical Calendar Calculations
|
|
4
|
+
* Based on taro-bazi's high-precision algorithms
|
|
5
|
+
* Implements calculations from 寿星万年历 (Longevity Star Calendar)
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ASTRONOMICAL_CONSTANTS = void 0;
|
|
9
|
+
exports.gregorianToJulianDay = gregorianToJulianDay;
|
|
10
|
+
exports.julianDayToGregorian = julianDayToGregorian;
|
|
11
|
+
exports.getEarthNutationParameter = getEarthNutationParameter;
|
|
12
|
+
exports.getLightAberration = getLightAberration;
|
|
13
|
+
exports.getSolarLongitude = getSolarLongitude;
|
|
14
|
+
exports.findSolarTermTime = findSolarTermTime;
|
|
15
|
+
exports.getSolarTermsForYear = getSolarTermsForYear;
|
|
16
|
+
exports.getNewMoonTime = getNewMoonTime;
|
|
17
|
+
exports.isValidDate = isValidDate;
|
|
18
|
+
/**
|
|
19
|
+
* Convert Gregorian date to Julian Day Number
|
|
20
|
+
* Valid from 100 CE onwards
|
|
21
|
+
*/
|
|
22
|
+
function gregorianToJulianDay(year, month, day, hour = 0, minute = 0, second = 0) {
|
|
23
|
+
// Handle calendar reform (Gregorian calendar adopted Oct 15, 1582)
|
|
24
|
+
const a = Math.floor((14 - month) / 12);
|
|
25
|
+
const y = year + 4800 - a;
|
|
26
|
+
const m = month + 12 * a - 3;
|
|
27
|
+
let jd;
|
|
28
|
+
if (year > 1582 || (year === 1582 && month > 10) || (year === 1582 && month === 10 && day >= 15)) {
|
|
29
|
+
// Gregorian calendar
|
|
30
|
+
jd = day + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400) - 32045;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Julian calendar
|
|
34
|
+
jd = day + Math.floor((153 * m + 2) / 5) + 365 * y + Math.floor(y / 4) - 32083;
|
|
35
|
+
}
|
|
36
|
+
// Add time as fraction of day
|
|
37
|
+
const timeFraction = (hour + minute / 60 + second / 3600) / 24;
|
|
38
|
+
return jd + timeFraction;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert Julian Day Number to Gregorian date
|
|
42
|
+
*/
|
|
43
|
+
function julianDayToGregorian(jd) {
|
|
44
|
+
const jdi = Math.floor(jd);
|
|
45
|
+
const jdf = jd - jdi;
|
|
46
|
+
let a, b;
|
|
47
|
+
if (jdi >= 2299161) {
|
|
48
|
+
// Gregorian calendar
|
|
49
|
+
a = Math.floor((jdi - 1867216.25) / 36524.25);
|
|
50
|
+
b = jdi + 1 + a - Math.floor(a / 4);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Julian calendar
|
|
54
|
+
b = jdi;
|
|
55
|
+
}
|
|
56
|
+
const c = b + 1524;
|
|
57
|
+
const d = Math.floor((c - 122.1) / 365.25);
|
|
58
|
+
const e = Math.floor(365.25 * d);
|
|
59
|
+
const m = Math.floor((c - e) / 30.6001);
|
|
60
|
+
const day = c - e - Math.floor(30.6001 * m);
|
|
61
|
+
const month = m < 14 ? m - 1 : m - 13;
|
|
62
|
+
const year = month > 2 ? d - 4716 : d - 4715;
|
|
63
|
+
// Extract time from fractional part
|
|
64
|
+
const hours = jdf * 24;
|
|
65
|
+
const hour = Math.floor(hours);
|
|
66
|
+
const minutes = (hours - hour) * 60;
|
|
67
|
+
const minute = Math.floor(minutes);
|
|
68
|
+
const second = Math.floor((minutes - minute) * 60);
|
|
69
|
+
return { year, month, day, hour, minute, second };
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Calculate Earth's nutation parameters
|
|
73
|
+
* Returns nutation in longitude (Δψ) and obliquity (Δε) in degrees
|
|
74
|
+
*/
|
|
75
|
+
function getEarthNutationParameter(jd) {
|
|
76
|
+
const T = (jd - 2451545.0) / 36525.0;
|
|
77
|
+
const T2 = T * T;
|
|
78
|
+
const T3 = T2 * T;
|
|
79
|
+
// Mean anomaly of the Moon
|
|
80
|
+
const M = 134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250;
|
|
81
|
+
// Mean anomaly of the Sun
|
|
82
|
+
const M_ = 357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000;
|
|
83
|
+
// Moon's argument of latitude
|
|
84
|
+
const F = 93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270;
|
|
85
|
+
// Longitude of ascending node of Moon's orbit
|
|
86
|
+
const Omega = 125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000;
|
|
87
|
+
// Convert to radians
|
|
88
|
+
const rad = Math.PI / 180;
|
|
89
|
+
const MRad = M * rad;
|
|
90
|
+
const M_Rad = M_ * rad;
|
|
91
|
+
const FRad = F * rad;
|
|
92
|
+
const OmegaRad = Omega * rad;
|
|
93
|
+
// Nutation in longitude (simplified, most significant terms only)
|
|
94
|
+
const deltaPsi = -17.20 * Math.sin(OmegaRad)
|
|
95
|
+
- 1.32 * Math.sin(2 * FRad - 2 * OmegaRad)
|
|
96
|
+
- 0.23 * Math.sin(2 * FRad + 2 * OmegaRad);
|
|
97
|
+
// Nutation in obliquity
|
|
98
|
+
const deltaEpsilon = 9.20 * Math.cos(OmegaRad)
|
|
99
|
+
+ 0.57 * Math.cos(2 * FRad - 2 * OmegaRad)
|
|
100
|
+
+ 0.10 * Math.cos(2 * FRad + 2 * OmegaRad);
|
|
101
|
+
return {
|
|
102
|
+
longitude: deltaPsi / 3600, // Convert arcseconds to degrees
|
|
103
|
+
obliquity: deltaEpsilon / 3600
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Calculate the aberration of light
|
|
108
|
+
* Returns correction in degrees
|
|
109
|
+
*/
|
|
110
|
+
function getLightAberration(jd) {
|
|
111
|
+
const T = (jd - 2451545.0) / 36525.0;
|
|
112
|
+
// Mean longitude of the Sun
|
|
113
|
+
const L = 280.46646 + 36000.76983 * T + 0.0003032 * T * T;
|
|
114
|
+
// Convert to radians
|
|
115
|
+
const LRad = (L % 360) * Math.PI / 180;
|
|
116
|
+
// Aberration constant (in arcseconds)
|
|
117
|
+
const k = 20.49552;
|
|
118
|
+
// Calculate aberration
|
|
119
|
+
const aberration = -k * Math.cos(LRad) / 3600;
|
|
120
|
+
return aberration;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Calculate the apparent solar longitude
|
|
124
|
+
* Includes corrections for nutation and aberration
|
|
125
|
+
*/
|
|
126
|
+
function getSolarLongitude(jd) {
|
|
127
|
+
const T = (jd - 2451545.0) / 36525.0;
|
|
128
|
+
const T2 = T * T;
|
|
129
|
+
const T3 = T2 * T;
|
|
130
|
+
// Mean longitude of the Sun
|
|
131
|
+
const L0 = 280.46646 + 36000.76983 * T + 0.0003032 * T2;
|
|
132
|
+
// Mean anomaly of the Sun
|
|
133
|
+
const M = 357.52911 + 35999.05029 * T - 0.0001537 * T2;
|
|
134
|
+
const MRad = M * Math.PI / 180;
|
|
135
|
+
// Equation of center
|
|
136
|
+
const C = (1.914602 - 0.004817 * T - 0.000014 * T2) * Math.sin(MRad)
|
|
137
|
+
+ (0.019993 - 0.000101 * T) * Math.sin(2 * MRad)
|
|
138
|
+
+ 0.000289 * Math.sin(3 * MRad);
|
|
139
|
+
// True longitude
|
|
140
|
+
const trueLongitude = L0 + C;
|
|
141
|
+
// Get nutation correction
|
|
142
|
+
const nutation = getEarthNutationParameter(jd);
|
|
143
|
+
// Get aberration correction
|
|
144
|
+
const aberration = getLightAberration(jd);
|
|
145
|
+
// Apparent longitude
|
|
146
|
+
const apparentLongitude = trueLongitude + nutation.longitude + aberration;
|
|
147
|
+
// Normalize to 0-360 degrees
|
|
148
|
+
return ((apparentLongitude % 360) + 360) % 360;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Find the exact moment of a solar term
|
|
152
|
+
* Uses Newton-Raphson iteration for precision
|
|
153
|
+
*/
|
|
154
|
+
function findSolarTermTime(year, targetLongitude) {
|
|
155
|
+
// Initial guess: approximate date based on mean solar motion
|
|
156
|
+
const meanDaysPerDegree = 365.2422 / 360;
|
|
157
|
+
const dayOfYear = targetLongitude * meanDaysPerDegree;
|
|
158
|
+
let jd = gregorianToJulianDay(year, 1, 1) + dayOfYear;
|
|
159
|
+
// Newton-Raphson iteration
|
|
160
|
+
const maxIterations = 10;
|
|
161
|
+
const tolerance = 0.00001; // About 0.86 seconds
|
|
162
|
+
for (let i = 0; i < maxIterations; i++) {
|
|
163
|
+
const currentLongitude = getSolarLongitude(jd);
|
|
164
|
+
let diff = targetLongitude - currentLongitude;
|
|
165
|
+
// Handle wraparound at 360/0 degrees
|
|
166
|
+
if (diff > 180)
|
|
167
|
+
diff -= 360;
|
|
168
|
+
if (diff < -180)
|
|
169
|
+
diff += 360;
|
|
170
|
+
if (Math.abs(diff) < tolerance)
|
|
171
|
+
break;
|
|
172
|
+
// Adjust JD based on difference
|
|
173
|
+
// Sun moves approximately 0.9856 degrees per day
|
|
174
|
+
jd += diff / 0.9856;
|
|
175
|
+
}
|
|
176
|
+
const date = julianDayToGregorian(jd);
|
|
177
|
+
return new Date(date.year, date.month - 1, date.day, date.hour, date.minute, date.second);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get all 24 solar terms for a given year
|
|
181
|
+
*/
|
|
182
|
+
function getSolarTermsForYear(year) {
|
|
183
|
+
const solarTermNames = [
|
|
184
|
+
'立春', '雨水', '惊蛰', '春分', '清明', '谷雨',
|
|
185
|
+
'立夏', '小满', '芒种', '夏至', '小暑', '大暑',
|
|
186
|
+
'立秋', '处暑', '白露', '秋分', '寒露', '霜降',
|
|
187
|
+
'立冬', '小雪', '大雪', '冬至', '小寒', '大寒'
|
|
188
|
+
];
|
|
189
|
+
const terms = [];
|
|
190
|
+
for (let i = 0; i < 24; i++) {
|
|
191
|
+
const longitude = (315 + i * 15) % 360; // Start from 立春 at 315°
|
|
192
|
+
const date = findSolarTermTime(year, longitude);
|
|
193
|
+
// IMPORTANT: Adjust for Beijing time (UTC+8)
|
|
194
|
+
// The astronomical calculations return UTC time, but BaZi uses Beijing time
|
|
195
|
+
const beijingDate = new Date(date.getTime() + 8 * 60 * 60 * 1000);
|
|
196
|
+
terms.push({
|
|
197
|
+
name: solarTermNames[i],
|
|
198
|
+
date: beijingDate,
|
|
199
|
+
longitude
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return terms;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Calculate the precise moment of new moon
|
|
206
|
+
* Used for lunar calendar calculations
|
|
207
|
+
*/
|
|
208
|
+
function getNewMoonTime(k) {
|
|
209
|
+
// k is the lunation number (0 = Jan 6, 2000)
|
|
210
|
+
const T = k / 1236.85;
|
|
211
|
+
const T2 = T * T;
|
|
212
|
+
const T3 = T2 * T;
|
|
213
|
+
const T4 = T3 * T;
|
|
214
|
+
// Mean new moon
|
|
215
|
+
const JDE = 2451550.09766 + 29.530588861 * k
|
|
216
|
+
+ 0.00015437 * T2
|
|
217
|
+
- 0.000000150 * T3
|
|
218
|
+
+ 0.00000000073 * T4;
|
|
219
|
+
// Sun's mean anomaly
|
|
220
|
+
const M = 2.5534 + 29.10535670 * k
|
|
221
|
+
- 0.0000014 * T2
|
|
222
|
+
- 0.00000011 * T3;
|
|
223
|
+
// Moon's mean anomaly
|
|
224
|
+
const Mp = 201.5643 + 385.81693528 * k
|
|
225
|
+
+ 0.0107582 * T2
|
|
226
|
+
+ 0.00001238 * T3
|
|
227
|
+
- 0.000000058 * T4;
|
|
228
|
+
// Moon's argument of latitude
|
|
229
|
+
const F = 160.7108 + 390.67050284 * k
|
|
230
|
+
- 0.0016118 * T2
|
|
231
|
+
- 0.00000227 * T3
|
|
232
|
+
+ 0.000000011 * T4;
|
|
233
|
+
// Convert to radians
|
|
234
|
+
const rad = Math.PI / 180;
|
|
235
|
+
const MRad = M * rad;
|
|
236
|
+
const MpRad = Mp * rad;
|
|
237
|
+
const FRad = F * rad;
|
|
238
|
+
// Corrections (simplified, main terms only)
|
|
239
|
+
const correction = -0.40720 * Math.sin(MpRad)
|
|
240
|
+
+ 0.17241 * Math.sin(MRad)
|
|
241
|
+
+ 0.01608 * Math.sin(2 * MpRad)
|
|
242
|
+
+ 0.01039 * Math.sin(2 * FRad)
|
|
243
|
+
+ 0.00739 * Math.sin(MpRad - MRad);
|
|
244
|
+
return JDE + correction;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Constants for precise calculations
|
|
248
|
+
*/
|
|
249
|
+
exports.ASTRONOMICAL_CONSTANTS = {
|
|
250
|
+
J2000: 2451545.0, // Julian day for J2000.0 epoch
|
|
251
|
+
DAYS_PER_CENTURY: 36525.0, // Days in a Julian century
|
|
252
|
+
MEAN_SOLAR_DAY: 0.9856473354, // Mean solar motion in degrees per day
|
|
253
|
+
SYNODIC_MONTH: 29.530588861, // Mean synodic month in days
|
|
254
|
+
TROPICAL_YEAR: 365.2421897, // Tropical year in days
|
|
255
|
+
ABERRATION_CONSTANT: 20.49552, // Aberration constant in arcseconds
|
|
256
|
+
EARTH_OBLIQUITY_J2000: 23.43929111 // Earth's obliquity at J2000.0 in degrees
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Export utility function to check calculation validity
|
|
260
|
+
*/
|
|
261
|
+
function isValidDate(year, month, day) {
|
|
262
|
+
// Support dates from 100 CE as per taro-bazi
|
|
263
|
+
if (year < 100 || year > 3000)
|
|
264
|
+
return false;
|
|
265
|
+
if (month < 1 || month > 12)
|
|
266
|
+
return false;
|
|
267
|
+
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
268
|
+
// Check for leap year
|
|
269
|
+
if (month === 2) {
|
|
270
|
+
const isLeap = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);
|
|
271
|
+
if (isLeap)
|
|
272
|
+
daysInMonth[1] = 29;
|
|
273
|
+
}
|
|
274
|
+
return day >= 1 && day <= daysInMonth[month - 1];
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=astronomicalCalendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"astronomicalCalendar.js","sourceRoot":"","sources":["../../../src/core/calendar/astronomicalCalendar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export interface PreciseBaziPillar {
|
|
2
|
+
stem: string;
|
|
3
|
+
branch: string;
|
|
4
|
+
nayin: string;
|
|
5
|
+
wuxing: string;
|
|
6
|
+
hiddenStems: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface PreciseBaziChart {
|
|
9
|
+
year: PreciseBaziPillar;
|
|
10
|
+
month: PreciseBaziPillar;
|
|
11
|
+
day: PreciseBaziPillar;
|
|
12
|
+
hour: PreciseBaziPillar;
|
|
13
|
+
dayMaster: string;
|
|
14
|
+
solarTermInfo: {
|
|
15
|
+
current: {
|
|
16
|
+
name: string;
|
|
17
|
+
date: Date;
|
|
18
|
+
} | null;
|
|
19
|
+
next: {
|
|
20
|
+
name: string;
|
|
21
|
+
date: Date;
|
|
22
|
+
} | null;
|
|
23
|
+
monthName: string;
|
|
24
|
+
};
|
|
25
|
+
julianDay: number;
|
|
26
|
+
lunarDate?: {
|
|
27
|
+
year: number;
|
|
28
|
+
month: number;
|
|
29
|
+
day: number;
|
|
30
|
+
isLeap: boolean;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export declare class PreciseCalendar {
|
|
34
|
+
/**
|
|
35
|
+
* 计算精确的八字四柱
|
|
36
|
+
* @param date 公历日期
|
|
37
|
+
* @param hour 小时 (0-23)
|
|
38
|
+
* @param minute 分钟 (0-59)
|
|
39
|
+
* @returns 精确的八字信息
|
|
40
|
+
*/
|
|
41
|
+
static calculatePreciseBazi(date: Date, hour?: number, minute?: number): PreciseBaziChart;
|
|
42
|
+
/**
|
|
43
|
+
* 计算年柱(以立春为分界点)
|
|
44
|
+
*/
|
|
45
|
+
private static calculateYearPillar;
|
|
46
|
+
/**
|
|
47
|
+
* 计算月柱(以节气为分界点)
|
|
48
|
+
*/
|
|
49
|
+
private static calculateMonthPillar;
|
|
50
|
+
/**
|
|
51
|
+
* 计算日柱(基于儒略日)
|
|
52
|
+
*/
|
|
53
|
+
private static calculateDayPillar;
|
|
54
|
+
/**
|
|
55
|
+
* 计算时柱
|
|
56
|
+
*/
|
|
57
|
+
private static calculateHourPillar;
|
|
58
|
+
/**
|
|
59
|
+
* 创建柱子对象
|
|
60
|
+
*/
|
|
61
|
+
private static createPillar;
|
|
62
|
+
/**
|
|
63
|
+
* 获取某日的详细节气信息
|
|
64
|
+
*/
|
|
65
|
+
static getDetailedSolarTermInfo(date: Date): {
|
|
66
|
+
currentTerm: string;
|
|
67
|
+
nextTerm: string;
|
|
68
|
+
daysToNext: number;
|
|
69
|
+
monthName: string;
|
|
70
|
+
season: string;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* 验证计算结果的准确性
|
|
74
|
+
*/
|
|
75
|
+
static validateCalculation(date: Date, result: PreciseBaziChart): {
|
|
76
|
+
isValid: boolean;
|
|
77
|
+
warnings: string[];
|
|
78
|
+
confidence: number;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=calendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../../src/core/calendar/calendar.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,iBAAiB,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QACb,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QAC7C,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,IAAI,CAAA;SAAE,GAAG,IAAI,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;CACH;AAED,qBAAa,eAAe;IAC1B;;;;;;OAMG;IACH,MAAM,CAAC,oBAAoB,CACzB,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,MAAwB,EAC9B,MAAM,GAAE,MAA0B,GACjC,gBAAgB;IAyDnB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA2BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA2CnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAQjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA6BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAiB3B;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG;QAC3C,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB;IAyBD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,gBAAgB,GACvB;QACD,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB;CAiCF"}
|