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,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 流时计算器
|
|
4
|
+
* 计算指定时辰的流时信息
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.HourlyCalculator = void 0;
|
|
8
|
+
const types_1 = require("../../../services/ziwei/types");
|
|
9
|
+
class HourlyCalculator {
|
|
10
|
+
// 时辰名称
|
|
11
|
+
static HOUR_NAMES = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
|
|
12
|
+
// 时辰时间范围
|
|
13
|
+
static HOUR_RANGES = [
|
|
14
|
+
'23:00-01:00', '01:00-03:00', '03:00-05:00', '05:00-07:00',
|
|
15
|
+
'07:00-09:00', '09:00-11:00', '11:00-13:00', '13:00-15:00',
|
|
16
|
+
'15:00-17:00', '17:00-19:00', '19:00-21:00', '21:00-23:00'
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* 计算指定时辰的流时信息(使用新的流時算法)
|
|
20
|
+
*
|
|
21
|
+
* 新流時法:
|
|
22
|
+
* 1. 找到本命盤中「子」宮的位置(哪個宮位)
|
|
23
|
+
* 2. 這個宮位就是「日斗君」
|
|
24
|
+
* 3. 流日的這個宮位就是「子時命宮」
|
|
25
|
+
* 4. 其他時辰順時針推算
|
|
26
|
+
*/
|
|
27
|
+
static calculate(adapter, year, month, day, hour // 0-23
|
|
28
|
+
) {
|
|
29
|
+
try {
|
|
30
|
+
const dateStr = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
|
31
|
+
const hourIndex = types_1.HOUR_TO_INDEX[hour] || 0;
|
|
32
|
+
// 獲取本命盤的所有宮位
|
|
33
|
+
const palaces = adapter.getPalaces();
|
|
34
|
+
if (!palaces || palaces.length === 0) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
// 找到本命盤中「子」宮的位置(哪個宮位)
|
|
38
|
+
const ziPalace = palaces.find(p => p.earthlyBranch === '子');
|
|
39
|
+
if (!ziPalace) {
|
|
40
|
+
console.error('找不到子宮');
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
// 獲取「日斗君」- 即子宮所在的宮位名稱
|
|
44
|
+
const riDouJun = ziPalace.name; // 例如:兄弟宮
|
|
45
|
+
// 獲取流日信息
|
|
46
|
+
const horoscope = adapter.getHoroscope(dateStr);
|
|
47
|
+
if (!horoscope?.daily) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// 獲取流日的宮位名稱(用於顯示)
|
|
51
|
+
const dailyPalaceNames = horoscope.daily.palaceNames || [];
|
|
52
|
+
// 找到日斗君(riDouJun)在流日盤中的索引
|
|
53
|
+
// riDouJun 是本命盤子宮的名稱(比如"官祿宮")
|
|
54
|
+
// 我們需要在流日盤中找到這個宮位的索引
|
|
55
|
+
const riDouJunIndexInDaily = dailyPalaceNames.indexOf(riDouJun);
|
|
56
|
+
if (riDouJunIndexInDaily === -1) {
|
|
57
|
+
console.error('在流日盤中找不到日斗君宮位:', riDouJun);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
// 計算流時命宮索引
|
|
61
|
+
// riDouJunIndexInDaily 是子時命宮的位置
|
|
62
|
+
// 其他時辰順時針推算
|
|
63
|
+
const hourlyPalaceIndex = (riDouJunIndexInDaily + hourIndex) % 12;
|
|
64
|
+
// 獲取流時的天干地支
|
|
65
|
+
const hourlyBranch = this.HOUR_NAMES[hourIndex];
|
|
66
|
+
// 計算時干(需要日干來推算)
|
|
67
|
+
const dayStem = horoscope.daily?.heavenlyStem || '';
|
|
68
|
+
const hourlyStem = this.calculateHourlyStem(dayStem, hourIndex);
|
|
69
|
+
// 計算流時四化
|
|
70
|
+
const hourlyMutagen = adapter.getMutagenByStem(hourlyStem);
|
|
71
|
+
const mutagenList = [
|
|
72
|
+
`化祿:${hourlyMutagen.lu}`,
|
|
73
|
+
`化權:${hourlyMutagen.quan}`,
|
|
74
|
+
`化科:${hourlyMutagen.ke}`,
|
|
75
|
+
`化忌:${hourlyMutagen.ji}`
|
|
76
|
+
];
|
|
77
|
+
// 計算流時的宮位名稱
|
|
78
|
+
// hourlyPalaceIndex 是流時命宮的位置
|
|
79
|
+
const PALACE_ORDER = ['命宮', '父母宮', '福德宮', '田宅宮', '官祿宮', '僕役宮', '遷移宮', '疾厄宮', '財帛宮', '子女宮', '夫妻宮', '兄弟宮'];
|
|
80
|
+
const hourlyPalaceNames = new Array(12);
|
|
81
|
+
for (let i = 0; i < 12; i++) {
|
|
82
|
+
// 從流時命宮開始,順時針排列宮位名稱
|
|
83
|
+
const palaceOrderIndex = (i - hourlyPalaceIndex + 12) % 12;
|
|
84
|
+
hourlyPalaceNames[i] = PALACE_ORDER[palaceOrderIndex];
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
year,
|
|
88
|
+
month,
|
|
89
|
+
day,
|
|
90
|
+
hour,
|
|
91
|
+
heavenlyStem: hourlyStem,
|
|
92
|
+
earthlyBranch: hourlyBranch,
|
|
93
|
+
palaceIndex: hourlyPalaceIndex,
|
|
94
|
+
mutagen: mutagenList,
|
|
95
|
+
palaceNames: hourlyPalaceNames,
|
|
96
|
+
timeRange: this.HOUR_RANGES[hourIndex] || ''
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
console.error('计算流时失败:', error);
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 根據日干計算時干
|
|
106
|
+
* 使用五虎遁法
|
|
107
|
+
*/
|
|
108
|
+
static calculateHourlyStem(dayStem, hourIndex) {
|
|
109
|
+
const stemCycle = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
|
|
110
|
+
// 五虎遁起始干支對照表
|
|
111
|
+
const startStemMap = {
|
|
112
|
+
'甲': 0, '己': 0, // 甲己起甲子
|
|
113
|
+
'乙': 2, '庚': 2, // 乙庚起丙子
|
|
114
|
+
'丙': 4, '辛': 4, // 丙辛起戊子
|
|
115
|
+
'丁': 6, '壬': 6, // 丁壬起庚子
|
|
116
|
+
'戊': 8, '癸': 8 // 戊癸起壬子
|
|
117
|
+
};
|
|
118
|
+
const startIndex = startStemMap[dayStem] || 0;
|
|
119
|
+
const stemIndex = (startIndex + hourIndex) % 10;
|
|
120
|
+
return stemCycle[stemIndex];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 获取一天的所有时辰信息
|
|
124
|
+
*/
|
|
125
|
+
static calculateDay(adapter, year, month, day) {
|
|
126
|
+
const hours = [];
|
|
127
|
+
// 12个时辰
|
|
128
|
+
const hourMapping = [23, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21];
|
|
129
|
+
for (const hour of hourMapping) {
|
|
130
|
+
const hourlyInfo = this.calculate(adapter, year, month, day, hour);
|
|
131
|
+
if (hourlyInfo) {
|
|
132
|
+
hours.push(hourlyInfo);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return hours;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.HourlyCalculator = HourlyCalculator;
|
|
139
|
+
//# sourceMappingURL=HourlyCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HourlyCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/HourlyCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 小限计算器
|
|
3
|
+
* 计算指定年份或年龄范围的小限信息
|
|
4
|
+
*
|
|
5
|
+
* 小限规则:
|
|
6
|
+
* - 以出生年支确定起始宫位
|
|
7
|
+
* - 男顺女逆运行
|
|
8
|
+
* - 每年一宫,12年一轮回
|
|
9
|
+
*/
|
|
10
|
+
import { IztroAdapter } from '../../../core/ziwei/IztroAdapter';
|
|
11
|
+
import { Palace } from '../types';
|
|
12
|
+
export interface MinorLimitInfo {
|
|
13
|
+
age: number;
|
|
14
|
+
year: number;
|
|
15
|
+
palaceIndex: number;
|
|
16
|
+
heavenlyStem: string;
|
|
17
|
+
earthlyBranch: string;
|
|
18
|
+
palaceNames?: string[];
|
|
19
|
+
mutagen?: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare class MinorLimitCalculator {
|
|
22
|
+
private static readonly MINOR_LIMIT_START;
|
|
23
|
+
static calculate(adapter: IztroAdapter, birthYear: number, targetYear: number): MinorLimitInfo | null;
|
|
24
|
+
static calculateRange(adapter: IztroAdapter, birthYear: number, startAge: number, endAge: number): MinorLimitInfo[];
|
|
25
|
+
static calculateByYearRange(adapter: IztroAdapter, birthYear: number, startYear: number, endYear: number): MinorLimitInfo[];
|
|
26
|
+
static calculateAll(adapter: IztroAdapter, birthYear: number, maxAge?: number): MinorLimitInfo[];
|
|
27
|
+
static getStartBranch(yearBranch: string): string;
|
|
28
|
+
static getMinorLimitPalaceIndex(yearBranch: string, gender: 'male' | 'female', age: number, palaces: Palace[]): number;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=MinorLimitCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinorLimitCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MinorLimitCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAoC,MAAM,UAAU,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAKvC;IAEF,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,cAAc,GAAG,IAAI;IA0BxB,MAAM,CAAC,cAAc,CACnB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,cAAc,EAAE;IAcnB,MAAM,CAAC,oBAAoB,CACzB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,cAAc,EAAE;IAanB,MAAM,CAAC,YAAY,CACjB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAW,GAClB,cAAc,EAAE;IAInB,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,wBAAwB,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,QAAQ,EACzB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM;CAoBV"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 小限计算器
|
|
4
|
+
* 计算指定年份或年龄范围的小限信息
|
|
5
|
+
*
|
|
6
|
+
* 小限规则:
|
|
7
|
+
* - 以出生年支确定起始宫位
|
|
8
|
+
* - 男顺女逆运行
|
|
9
|
+
* - 每年一宫,12年一轮回
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MinorLimitCalculator = void 0;
|
|
13
|
+
const types_1 = require("../types");
|
|
14
|
+
class MinorLimitCalculator {
|
|
15
|
+
static MINOR_LIMIT_START = {
|
|
16
|
+
'寅': '辰', '午': '辰', '戌': '辰',
|
|
17
|
+
'申': '戌', '子': '戌', '辰': '戌',
|
|
18
|
+
'巳': '未', '酉': '未', '丑': '未',
|
|
19
|
+
'亥': '丑', '卯': '丑', '未': '丑'
|
|
20
|
+
};
|
|
21
|
+
static calculate(adapter, birthYear, targetYear) {
|
|
22
|
+
try {
|
|
23
|
+
const dateStr = `${targetYear}-06-15`;
|
|
24
|
+
const horoscope = adapter.getHoroscope(dateStr);
|
|
25
|
+
if (!horoscope?.age) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const age = horoscope.age;
|
|
29
|
+
return {
|
|
30
|
+
age: age.nominalAge,
|
|
31
|
+
year: targetYear,
|
|
32
|
+
palaceIndex: age.index,
|
|
33
|
+
heavenlyStem: age.heavenlyStem || '',
|
|
34
|
+
earthlyBranch: age.earthlyBranch || '',
|
|
35
|
+
palaceNames: age.palaceNames || [],
|
|
36
|
+
mutagen: age.mutagen || []
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error('计算小限失败:', error);
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
static calculateRange(adapter, birthYear, startAge, endAge) {
|
|
45
|
+
const results = [];
|
|
46
|
+
for (let age = startAge; age <= endAge; age++) {
|
|
47
|
+
const targetYear = birthYear + age - 1;
|
|
48
|
+
const info = this.calculate(adapter, birthYear, targetYear);
|
|
49
|
+
if (info) {
|
|
50
|
+
results.push(info);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
static calculateByYearRange(adapter, birthYear, startYear, endYear) {
|
|
56
|
+
const results = [];
|
|
57
|
+
for (let year = startYear; year <= endYear; year++) {
|
|
58
|
+
const info = this.calculate(adapter, birthYear, year);
|
|
59
|
+
if (info) {
|
|
60
|
+
results.push(info);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return results;
|
|
64
|
+
}
|
|
65
|
+
static calculateAll(adapter, birthYear, maxAge = 96) {
|
|
66
|
+
return this.calculateRange(adapter, birthYear, 1, maxAge);
|
|
67
|
+
}
|
|
68
|
+
static getStartBranch(yearBranch) {
|
|
69
|
+
return this.MINOR_LIMIT_START[yearBranch] || '辰';
|
|
70
|
+
}
|
|
71
|
+
static getMinorLimitPalaceIndex(yearBranch, gender, age, palaces) {
|
|
72
|
+
const startBranch = this.getStartBranch(yearBranch);
|
|
73
|
+
const startIndex = types_1.EARTHLY_BRANCHES.indexOf(startBranch);
|
|
74
|
+
if (startIndex === -1)
|
|
75
|
+
return 0;
|
|
76
|
+
const offset = (age - 1) % 12;
|
|
77
|
+
let targetBranchIndex;
|
|
78
|
+
if (gender === 'male') {
|
|
79
|
+
targetBranchIndex = (startIndex + offset) % 12;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
targetBranchIndex = (startIndex - offset + 12) % 12;
|
|
83
|
+
}
|
|
84
|
+
const targetBranch = types_1.EARTHLY_BRANCHES[targetBranchIndex];
|
|
85
|
+
const palaceIndex = palaces.findIndex(p => p.earthlyBranch === targetBranch);
|
|
86
|
+
return palaceIndex !== -1 ? palaceIndex : 0;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.MinorLimitCalculator = MinorLimitCalculator;
|
|
90
|
+
//# sourceMappingURL=MinorLimitCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinorLimitCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MinorLimitCalculator.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAGH,oCAAoE;AAapE,MAAa,oBAAoB;IACvB,MAAM,CAAU,iBAAiB,GAA2B;QAClE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;QAC5B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;KAC7B,CAAC;IAEF,MAAM,CAAC,SAAS,CACd,OAAqB,EACrB,SAAiB,EACjB,UAAkB;QAElB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,CAAC;YACtC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAEhD,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;YAE1B,OAAO;gBACL,GAAG,EAAE,GAAG,CAAC,UAAU;gBACnB,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,GAAG,CAAC,KAAK;gBACtB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;gBACpC,aAAa,EAAE,GAAG,CAAC,aAAa,IAAI,EAAE;gBACtC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;gBAClC,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;aAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,CAAC,cAAc,CACnB,OAAqB,EACrB,SAAiB,EACjB,QAAgB,EAChB,MAAc;QAEd,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,IAAI,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;YAC5D,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,oBAAoB,CACzB,OAAqB,EACrB,SAAiB,EACjB,SAAiB,EACjB,OAAe;QAEf,MAAM,OAAO,GAAqB,EAAE,CAAC;QAErC,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,YAAY,CACjB,OAAqB,EACrB,SAAiB,EACjB,SAAiB,EAAE;QAEnB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,UAAkB;QACtC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,wBAAwB,CAC7B,UAAkB,EAClB,MAAyB,EACzB,GAAW,EACX,OAAiB;QAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,wBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEzD,IAAI,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,iBAAyB,CAAC;QAE9B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,iBAAiB,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,iBAAiB,GAAG,CAAC,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;QACtD,CAAC;QAED,MAAM,YAAY,GAAG,wBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC,CAAC;QAE7E,OAAO,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;;AA/GH,oDAgHC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 流月计算器
|
|
3
|
+
* 计算指定年月的流月信息
|
|
4
|
+
*/
|
|
5
|
+
import { IztroAdapter } from '../../../core/ziwei/IztroAdapter';
|
|
6
|
+
export interface MonthlyInfo {
|
|
7
|
+
year: number;
|
|
8
|
+
month: number;
|
|
9
|
+
isLeapMonth?: boolean;
|
|
10
|
+
heavenlyStem: string;
|
|
11
|
+
earthlyBranch: string;
|
|
12
|
+
palaceIndex: number;
|
|
13
|
+
mutagen?: string[];
|
|
14
|
+
palaceNames?: string[];
|
|
15
|
+
startDate?: Date;
|
|
16
|
+
endDate?: Date;
|
|
17
|
+
}
|
|
18
|
+
export declare class MonthlyCalculator {
|
|
19
|
+
/**
|
|
20
|
+
* 计算指定年月的流月信息
|
|
21
|
+
* @param adapter - Iztro适配器
|
|
22
|
+
* @param year - 公历年份
|
|
23
|
+
* @param monthIndex - 农历月份索引(包含闰月的月份数组索引)
|
|
24
|
+
* @param lunarMonth - 农历月份号(1-12)
|
|
25
|
+
* @param isLeapMonth - 是否闰月
|
|
26
|
+
*/
|
|
27
|
+
static calculate(adapter: IztroAdapter, year: number, monthIndex: number, lunarMonth?: number, isLeapMonth?: boolean): MonthlyInfo | null;
|
|
28
|
+
/**
|
|
29
|
+
* 获取指定农历年的闰月(如果有的话)
|
|
30
|
+
* @returns 闰月月份(1-12),如果没有闰月返回0
|
|
31
|
+
*/
|
|
32
|
+
static getLeapMonth(year: number): number;
|
|
33
|
+
/**
|
|
34
|
+
* 批量计算一年的流月信息(农历月,包含闰月)
|
|
35
|
+
* 紫微斗数流月使用农历月,从正月到腊月,如有闰月则包含在内
|
|
36
|
+
*/
|
|
37
|
+
static calculateYear(adapter: IztroAdapter, year: number): MonthlyInfo[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=MonthlyCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonthlyCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MonthlyCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CACd,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,OAAO,GACpB,WAAW,GAAG,IAAI;IAwErB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAkBzC;;;OAGG;IACH,MAAM,CAAC,aAAa,CAClB,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,MAAM,GACX,WAAW,EAAE;CAoBjB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 流月计算器
|
|
4
|
+
* 计算指定年月的流月信息
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MonthlyCalculator = void 0;
|
|
8
|
+
const lunar_javascript_1 = require("lunar-javascript");
|
|
9
|
+
class MonthlyCalculator {
|
|
10
|
+
/**
|
|
11
|
+
* 计算指定年月的流月信息
|
|
12
|
+
* @param adapter - Iztro适配器
|
|
13
|
+
* @param year - 公历年份
|
|
14
|
+
* @param monthIndex - 农历月份索引(包含闰月的月份数组索引)
|
|
15
|
+
* @param lunarMonth - 农历月份号(1-12)
|
|
16
|
+
* @param isLeapMonth - 是否闰月
|
|
17
|
+
*/
|
|
18
|
+
static calculate(adapter, year, monthIndex, lunarMonth, isLeapMonth) {
|
|
19
|
+
try {
|
|
20
|
+
if (lunarMonth === undefined) {
|
|
21
|
+
const dateStr = `${year}-${(monthIndex + 1).toString().padStart(2, '0')}-15`;
|
|
22
|
+
const horoscope = adapter.getHoroscope(dateStr);
|
|
23
|
+
if (!horoscope?.monthly) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const monthly = horoscope.monthly;
|
|
27
|
+
const palaceIndex = monthly.index !== undefined ? monthly.index : 0;
|
|
28
|
+
const startDate = new Date(year, monthIndex, 1);
|
|
29
|
+
const endDate = new Date(year, monthIndex + 1, 0);
|
|
30
|
+
return {
|
|
31
|
+
year,
|
|
32
|
+
month: monthIndex + 1,
|
|
33
|
+
isLeapMonth: false,
|
|
34
|
+
heavenlyStem: monthly.heavenlyStem || '',
|
|
35
|
+
earthlyBranch: monthly.earthlyBranch || '',
|
|
36
|
+
palaceIndex,
|
|
37
|
+
mutagen: monthly.mutagen || [],
|
|
38
|
+
palaceNames: monthly.palaceNames || [],
|
|
39
|
+
startDate,
|
|
40
|
+
endDate
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const lunarYear = year;
|
|
44
|
+
const monthParam = isLeapMonth ? -lunarMonth : lunarMonth;
|
|
45
|
+
const lunarDate = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 15);
|
|
46
|
+
const solarDate = lunarDate.getSolar();
|
|
47
|
+
const dateStr = `${solarDate.getYear()}-${solarDate.getMonth().toString().padStart(2, '0')}-${solarDate.getDay().toString().padStart(2, '0')}`;
|
|
48
|
+
const horoscope = adapter.getHoroscope(dateStr);
|
|
49
|
+
if (!horoscope?.monthly) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const monthly = horoscope.monthly;
|
|
53
|
+
const palaceIndex = monthly.index !== undefined ? monthly.index : 0;
|
|
54
|
+
const firstDay = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 1).getSolar();
|
|
55
|
+
let lastDayNum = 29;
|
|
56
|
+
try {
|
|
57
|
+
lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, 30);
|
|
58
|
+
lastDayNum = 30;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// 只有29天
|
|
62
|
+
}
|
|
63
|
+
const lastDay = lunar_javascript_1.Lunar.fromYmd(lunarYear, monthParam, lastDayNum).getSolar();
|
|
64
|
+
return {
|
|
65
|
+
year,
|
|
66
|
+
month: lunarMonth,
|
|
67
|
+
isLeapMonth: isLeapMonth || false,
|
|
68
|
+
heavenlyStem: monthly.heavenlyStem || '',
|
|
69
|
+
earthlyBranch: monthly.earthlyBranch || '',
|
|
70
|
+
palaceIndex: palaceIndex !== -1 ? palaceIndex : 0,
|
|
71
|
+
mutagen: monthly.mutagen || [],
|
|
72
|
+
palaceNames: monthly.palaceNames || [],
|
|
73
|
+
startDate: new Date(firstDay.getYear(), firstDay.getMonth() - 1, firstDay.getDay()),
|
|
74
|
+
endDate: new Date(lastDay.getYear(), lastDay.getMonth() - 1, lastDay.getDay())
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error('计算流月失败:', error);
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* 获取指定农历年的闰月(如果有的话)
|
|
84
|
+
* @returns 闰月月份(1-12),如果没有闰月返回0
|
|
85
|
+
*/
|
|
86
|
+
static getLeapMonth(year) {
|
|
87
|
+
try {
|
|
88
|
+
const lunar = lunar_javascript_1.Lunar.fromYmd(year, 1, 1);
|
|
89
|
+
const lunarYear = lunar.getYear();
|
|
90
|
+
for (let m = 1; m <= 12; m++) {
|
|
91
|
+
try {
|
|
92
|
+
lunar_javascript_1.Lunar.fromYmd(lunarYear, -m, 1);
|
|
93
|
+
return m;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// 该月没有闰月
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return 0;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return 0;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 批量计算一年的流月信息(农历月,包含闰月)
|
|
107
|
+
* 紫微斗数流月使用农历月,从正月到腊月,如有闰月则包含在内
|
|
108
|
+
*/
|
|
109
|
+
static calculateYear(adapter, year) {
|
|
110
|
+
const months = [];
|
|
111
|
+
const leapMonth = this.getLeapMonth(year);
|
|
112
|
+
for (let lunarMonth = 1; lunarMonth <= 12; lunarMonth++) {
|
|
113
|
+
const monthlyInfo = this.calculate(adapter, year, lunarMonth - 1, lunarMonth, false);
|
|
114
|
+
if (monthlyInfo) {
|
|
115
|
+
months.push(monthlyInfo);
|
|
116
|
+
}
|
|
117
|
+
if (leapMonth === lunarMonth) {
|
|
118
|
+
const leapMonthInfo = this.calculate(adapter, year, lunarMonth - 1, lunarMonth, true);
|
|
119
|
+
if (leapMonthInfo) {
|
|
120
|
+
months.push(leapMonthInfo);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return months;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.MonthlyCalculator = MonthlyCalculator;
|
|
128
|
+
//# sourceMappingURL=MonthlyCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MonthlyCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MonthlyCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 四化计算器
|
|
3
|
+
* 负责计算本命、大限、流年的四化信息
|
|
4
|
+
*/
|
|
5
|
+
import { MutagenInfo, CompleteMutagenInfo, Palace } from '../types';
|
|
6
|
+
export declare class MutagenCalculator {
|
|
7
|
+
/**
|
|
8
|
+
* 根据天干获取四化(代理到核心系统)
|
|
9
|
+
*/
|
|
10
|
+
static getMutagenByStem(stem: string): MutagenInfo;
|
|
11
|
+
/**
|
|
12
|
+
* 计算完整的四化信息
|
|
13
|
+
*/
|
|
14
|
+
static calculateCompleteMutagen(natalStem: string, decadalStem?: string, yearlyStem?: string, language?: string, monthlyStem?: string, dailyStem?: string, hourlyStem?: string): CompleteMutagenInfo;
|
|
15
|
+
/**
|
|
16
|
+
* 为宫位中的星曜添加四化标记
|
|
17
|
+
*/
|
|
18
|
+
static applyMutagenToPalaces(palaces: Palace[], mutagenInfo: CompleteMutagenInfo): Palace[];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=MutagenCalculator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MutagenCalculator.d.ts","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MutagenCalculator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,MAAM,EACP,MAAM,UAAU,CAAC;AAGlB,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAIlD;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAgB,EAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,GAClB,mBAAmB;IAiEtB;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAC1B,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,mBAAmB,GAC/B,MAAM,EAAE;CAyCZ"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 四化计算器
|
|
4
|
+
* 负责计算本命、大限、流年的四化信息
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MutagenCalculator = void 0;
|
|
8
|
+
const MutagenCore_1 = require("../../../core/ziwei/MutagenCore");
|
|
9
|
+
class MutagenCalculator {
|
|
10
|
+
/**
|
|
11
|
+
* 根据天干获取四化(代理到核心系统)
|
|
12
|
+
*/
|
|
13
|
+
static getMutagenByStem(stem) {
|
|
14
|
+
return MutagenCore_1.MutagenCore.getMutagen(stem) || { lu: '', quan: '', ke: '', ji: '' };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 计算完整的四化信息
|
|
18
|
+
*/
|
|
19
|
+
static calculateCompleteMutagen(natalStem, decadalStem, yearlyStem, language = 'zh-CN', monthlyStem, dailyStem, hourlyStem) {
|
|
20
|
+
// 获取四化基本信息
|
|
21
|
+
const mutagenData = MutagenCore_1.MutagenCore.getCompleteMutagenInfo(natalStem, decadalStem, yearlyStem);
|
|
22
|
+
// 计算流月、流日、流时的四化
|
|
23
|
+
const monthlyMutagen = monthlyStem ? this.getMutagenByStem(monthlyStem) : undefined;
|
|
24
|
+
const dailyMutagen = dailyStem ? this.getMutagenByStem(dailyStem) : undefined;
|
|
25
|
+
const hourlyMutagen = hourlyStem ? this.getMutagenByStem(hourlyStem) : undefined;
|
|
26
|
+
// 获取语言相关的名称
|
|
27
|
+
const prefixes = MutagenCore_1.MutagenCore.getMutagenPrefixes(language);
|
|
28
|
+
const typeNames = MutagenCore_1.MutagenCore.getMutagenTypeNames(language);
|
|
29
|
+
// 扩展prefixes以支持流月、流日、流时
|
|
30
|
+
const extendedPrefixes = {
|
|
31
|
+
...prefixes,
|
|
32
|
+
monthly: language === 'zh-CN' || language === 'zh-TW' ? '月' : 'M-',
|
|
33
|
+
daily: language === 'zh-CN' || language === 'zh-TW' ? '日' : 'D-',
|
|
34
|
+
hourly: language === 'zh-CN' || language === 'zh-TW' ? '時' : 'H-'
|
|
35
|
+
};
|
|
36
|
+
// 合并四化信息
|
|
37
|
+
const combined = new Map();
|
|
38
|
+
// 添加四化信息到map
|
|
39
|
+
const addMutagen = (mutagenInfo, prefix) => {
|
|
40
|
+
if (!mutagenInfo)
|
|
41
|
+
return;
|
|
42
|
+
if (mutagenInfo.lu) {
|
|
43
|
+
const existing = combined.get(mutagenInfo.lu) || [];
|
|
44
|
+
combined.set(mutagenInfo.lu, [...existing, `${prefix}${typeNames.lu}`]);
|
|
45
|
+
}
|
|
46
|
+
if (mutagenInfo.quan) {
|
|
47
|
+
const existing = combined.get(mutagenInfo.quan) || [];
|
|
48
|
+
combined.set(mutagenInfo.quan, [...existing, `${prefix}${typeNames.quan}`]);
|
|
49
|
+
}
|
|
50
|
+
if (mutagenInfo.ke) {
|
|
51
|
+
const existing = combined.get(mutagenInfo.ke) || [];
|
|
52
|
+
combined.set(mutagenInfo.ke, [...existing, `${prefix}${typeNames.ke}`]);
|
|
53
|
+
}
|
|
54
|
+
if (mutagenInfo.ji) {
|
|
55
|
+
const existing = combined.get(mutagenInfo.ji) || [];
|
|
56
|
+
combined.set(mutagenInfo.ji, [...existing, `${prefix}${typeNames.ji}`]);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
// 添加各层级四化
|
|
60
|
+
addMutagen(mutagenData.natal, prefixes.natal);
|
|
61
|
+
if (mutagenData.decade)
|
|
62
|
+
addMutagen(mutagenData.decade, prefixes.decade);
|
|
63
|
+
if (mutagenData.yearly)
|
|
64
|
+
addMutagen(mutagenData.yearly, prefixes.yearly);
|
|
65
|
+
if (monthlyMutagen)
|
|
66
|
+
addMutagen(monthlyMutagen, extendedPrefixes.monthly);
|
|
67
|
+
if (dailyMutagen)
|
|
68
|
+
addMutagen(dailyMutagen, extendedPrefixes.daily);
|
|
69
|
+
if (hourlyMutagen)
|
|
70
|
+
addMutagen(hourlyMutagen, extendedPrefixes.hourly);
|
|
71
|
+
return {
|
|
72
|
+
natal: mutagenData.natal,
|
|
73
|
+
decadal: mutagenData.decade,
|
|
74
|
+
yearly: mutagenData.yearly,
|
|
75
|
+
monthly: monthlyMutagen,
|
|
76
|
+
daily: dailyMutagen,
|
|
77
|
+
hourly: hourlyMutagen,
|
|
78
|
+
combined
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* 为宫位中的星曜添加四化标记
|
|
83
|
+
*/
|
|
84
|
+
static applyMutagenToPalaces(palaces, mutagenInfo) {
|
|
85
|
+
return palaces.map((palace) => {
|
|
86
|
+
// 处理主星
|
|
87
|
+
const majorStars = palace.majorStars.map(star => {
|
|
88
|
+
// Try to find mutagen for this star
|
|
89
|
+
let mutagens = mutagenInfo.combined.get(star.name) || [];
|
|
90
|
+
// Also try normalized name if no direct match
|
|
91
|
+
if (mutagens.length === 0) {
|
|
92
|
+
const normalizedName = MutagenCore_1.MutagenCore.normalizeStarName(star.name);
|
|
93
|
+
if (normalizedName !== star.name) {
|
|
94
|
+
mutagens = mutagenInfo.combined.get(normalizedName) || [];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { ...star, mutagen: mutagens };
|
|
98
|
+
});
|
|
99
|
+
// 处理辅星
|
|
100
|
+
const minorStars = palace.minorStars.map(star => {
|
|
101
|
+
// Try to find mutagen for this star
|
|
102
|
+
let mutagens = mutagenInfo.combined.get(star.name) || [];
|
|
103
|
+
// Also try normalized name if no direct match
|
|
104
|
+
if (mutagens.length === 0) {
|
|
105
|
+
const normalizedName = MutagenCore_1.MutagenCore.normalizeStarName(star.name);
|
|
106
|
+
if (normalizedName !== star.name) {
|
|
107
|
+
mutagens = mutagenInfo.combined.get(normalizedName) || [];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return { ...star, mutagen: mutagens };
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
...palace,
|
|
114
|
+
majorStars,
|
|
115
|
+
minorStars
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
exports.MutagenCalculator = MutagenCalculator;
|
|
121
|
+
//# sourceMappingURL=MutagenCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MutagenCalculator.js","sourceRoot":"","sources":["../../../../src/services/ziwei/calculators/MutagenCalculator.ts"],"names":[],"mappings":"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"}
|