kinwuzhao 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -0
- package/dist/index.cjs +17 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +17 -19
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/README.zh-CN.md +0 -303
package/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# kinwuzhao
|
|
2
|
+
|
|
3
|
+
五兆占卜排盘系统的 TypeScript 实现,移植自 [Python 原版](https://github.com/kinwuzhao/kinwuzhao)。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add kinwuzhao
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 快速上手
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { ganZhi, findCurrentJieQi, ganzhiPaiPan } from 'kinwuzhao';
|
|
15
|
+
|
|
16
|
+
// 1. 获取干支(年、月、日、时、分)
|
|
17
|
+
const gz = ganZhi(2025, 6, 27, 11, 24);
|
|
18
|
+
// => { year: '乙巳', month: '壬午', day: '丁卯', hour: '丙午', minute: '庚戌' }
|
|
19
|
+
|
|
20
|
+
// 2. 获取当前节气
|
|
21
|
+
const jq = findCurrentJieQi(2025, 6, 27, 11, 24);
|
|
22
|
+
// => '夏至'
|
|
23
|
+
|
|
24
|
+
// 3. 干支排盘
|
|
25
|
+
const result = ganzhiPaiPan(gz, 0, jq, '');
|
|
26
|
+
console.log(result);
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## API
|
|
30
|
+
|
|
31
|
+
### `ganZhi(year, month, day, hour, minute)`
|
|
32
|
+
|
|
33
|
+
将公历日期时间转换为年月日时分干支。
|
|
34
|
+
|
|
35
|
+
- **返回**: `{ year, month, day, hour, minute }` — 各柱干支字符串
|
|
36
|
+
|
|
37
|
+
### `findCurrentJieQi(year, month, day, hour, minute)`
|
|
38
|
+
|
|
39
|
+
根据日期时间查找当前所处节气。
|
|
40
|
+
|
|
41
|
+
### `ganzhiPaiPan(gzList, num, jq, cm, liurenData?)`
|
|
42
|
+
|
|
43
|
+
干支起盘,根据年月日时分干支计算五兆排盘结果。返回六宫位(兆、木乡、火乡、土乡、金乡、水乡)的完整信息,包括五行、六兽、六亲、旺相、孤虚等。
|
|
44
|
+
|
|
45
|
+
### `fiveZhaoPaiPan(num, jq, cm, gz1, gz2, liurenData?)`
|
|
46
|
+
|
|
47
|
+
五兆随机分配排盘(基数 36,随机分割取模 5)。
|
|
48
|
+
|
|
49
|
+
### 工具函数
|
|
50
|
+
|
|
51
|
+
| 函数 | 说明 |
|
|
52
|
+
|------|------|
|
|
53
|
+
| `findLunarHour(dayGanZhi)` | 五鼠遁 — 根据日干推算十二时辰干支 |
|
|
54
|
+
| `findLunarMonth(yearGanZhi)` | 五虎遁 — 根据年干推算十二月干支 |
|
|
55
|
+
| `findLunarMinute(hourGanZhi)` | 五狗遁 — 根据子时干支推算分干支 |
|
|
56
|
+
| `generateJiaZi()` | 生成六十甲子序列 |
|
|
57
|
+
| `getWuXing(ganOrZhi)` | 获取天干/地支/八卦的五行属性 |
|
|
58
|
+
| `findSeason(jieqi)` | 根据节气查找季节 |
|
|
59
|
+
|
|
60
|
+
## 开发
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pnpm install # 安装依赖
|
|
64
|
+
pnpm run build # 构建
|
|
65
|
+
pnpm run test # 运行测试
|
|
66
|
+
pnpm run dev # 监听模式构建
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 依赖
|
|
70
|
+
|
|
71
|
+
- [tyme4ts](https://github.com/6tail/tyme4ts) — 日历、八字、节气计算
|
|
72
|
+
|
|
73
|
+
## License
|
|
74
|
+
|
|
75
|
+
MIT
|
package/dist/index.cjs
CHANGED
|
@@ -157,7 +157,7 @@ var WU_XING_RELATION = {
|
|
|
157
157
|
\u91D1\u91D1: "\u6BD4\u548C",
|
|
158
158
|
\u91D1\u6C34: "\u6211\u751F",
|
|
159
159
|
\u6C34\u6728: "\u6211\u751F",
|
|
160
|
-
\u6C34\u706B: "\u5C05
|
|
160
|
+
\u6C34\u706B: "\u6211\u5C05",
|
|
161
161
|
\u6C34\u571F: "\u5C05\u6211",
|
|
162
162
|
\u6C34\u91D1: "\u751F\u6211",
|
|
163
163
|
\u6C34\u6C34: "\u6BD4\u548C"
|
|
@@ -266,21 +266,21 @@ function findLunarMonth(yearGanZhi) {
|
|
|
266
266
|
}
|
|
267
267
|
return result;
|
|
268
268
|
}
|
|
269
|
-
function
|
|
270
|
-
const
|
|
271
|
-
\
|
|
272
|
-
\
|
|
273
|
-
\
|
|
274
|
-
\
|
|
275
|
-
\
|
|
276
|
-
\
|
|
277
|
-
\
|
|
278
|
-
\
|
|
279
|
-
\
|
|
280
|
-
\
|
|
269
|
+
function findLunarMinute(hourGanZhi) {
|
|
270
|
+
const fiveDogs = {
|
|
271
|
+
\u7532: "\u7532\u620C",
|
|
272
|
+
\u5DF1: "\u7532\u620C",
|
|
273
|
+
\u4E59: "\u4E19\u620C",
|
|
274
|
+
\u5E9A: "\u4E19\u620C",
|
|
275
|
+
\u4E19: "\u620A\u620C",
|
|
276
|
+
\u8F9B: "\u620A\u620C",
|
|
277
|
+
\u4E01: "\u5E9A\u620C",
|
|
278
|
+
\u58EC: "\u5E9A\u620C",
|
|
279
|
+
\u620A: "\u58EC\u620C",
|
|
280
|
+
\u7678: "\u58EC\u620C"
|
|
281
281
|
};
|
|
282
282
|
const hourGan = hourGanZhi[0];
|
|
283
|
-
const startGanZhi =
|
|
283
|
+
const startGanZhi = fiveDogs[hourGan];
|
|
284
284
|
if (!startGanZhi) return JIAZI;
|
|
285
285
|
return newList(JIAZI, startGanZhi);
|
|
286
286
|
}
|
|
@@ -373,10 +373,8 @@ function ganZhi(year, month, day, hour, minute) {
|
|
|
373
373
|
};
|
|
374
374
|
}
|
|
375
375
|
function getMinuteGanZhi(ziGanZhi, hour, minute) {
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
const keIndex = (hour * 6 + Math.floor(roundedMinute / 10)) % 60;
|
|
379
|
-
return keList[keIndex];
|
|
376
|
+
const minuteList = findLunarMinute(ziGanZhi);
|
|
377
|
+
return minuteList[minute];
|
|
380
378
|
}
|
|
381
379
|
function getHourZhi(hour) {
|
|
382
380
|
const zhiMap = [
|
|
@@ -674,7 +672,7 @@ exports.YIN_YANG = YIN_YANG;
|
|
|
674
672
|
exports.ZHI_TO_GUA = ZHI_TO_GUA;
|
|
675
673
|
exports.findCurrentJieQi = findCurrentJieQi;
|
|
676
674
|
exports.findLunarHour = findLunarHour;
|
|
677
|
-
exports.
|
|
675
|
+
exports.findLunarMinute = findLunarMinute;
|
|
678
676
|
exports.findLunarMonth = findLunarMonth;
|
|
679
677
|
exports.findSeason = findSeason;
|
|
680
678
|
exports.fiveZhaoPaiPan = fiveZhaoPaiPan;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/utils.ts","../src/ganzhi.ts","../src/jieqi.ts","../src/kinwuzhao.ts"],"names":["SolarTime","key"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 五兆占卜系统 - 常量定义\n * 包含天干地支、五行、八卦等基础常量\n */\n\n// 天干地支\nexport const TIAN_GAN = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] as const;\nexport const DI_ZHI = [\n '子',\n '丑',\n '寅',\n '卯',\n '辰',\n '巳',\n '午',\n '未',\n '申',\n '酉',\n '戌',\n '亥',\n] as const;\n\n// 数字对应五行\nexport const NUM_TO_ELEMENT: Record<number, string> = {\n 1: '水',\n 2: '火',\n 3: '木',\n 4: '金',\n 5: '土',\n};\n\n// 五行\nexport const WU_XING = ['木', '火', '土', '金', '水'] as const;\n\n// 八卦\nexport const BA_GUA = ['艮', '震', '巽', '離', '坤', '兌', '乾', '坎'] as const;\n\n// 旺相胎沒死囚廢休\nexport const WANG_XIANG = ['王', '相', '胎', '沒', '死', '囚', '廢', '休'] as const;\n\n// 六兽序列\nexport const SIX_BEASTS = ['青龍', '朱雀', '螣蛇', '勾陳', '白虎', '玄武'] as const;\n\n// 六兽弱点\nexport const SIX_BEAST_WEAKNESS: Record<string, [string, string]> = {\n 青龍: ['坤', '兌'],\n 朱雀: ['坎', '巽'],\n 螣蛇: ['坎', '巽'],\n 勾陳: ['巽', '巽'],\n 白虎: ['坎', '離'],\n 玄武: ['巽', '震'],\n};\n\n// 日干对应起六兽首位\nexport const DAY_GAN_TO_BEAST: Record<string, string> = {\n 甲: '青龍',\n 乙: '青龍',\n 丙: '朱雀',\n 丁: '朱雀',\n 戊: '勾陳',\n 己: '勾陳',\n 庚: '白虎',\n 辛: '白虎',\n 壬: '玄武',\n 癸: '玄武',\n};\n\n// 二十四节气\nexport const TWENTY_FOUR_SOLAR_TERMS = [\n '立春',\n '雨水',\n '驚蟄',\n '春分',\n '清明',\n '穀雨',\n '立夏',\n '小滿',\n '芒種',\n '夏至',\n '小暑',\n '大暑',\n '立秋',\n '處暑',\n '白露',\n '秋分',\n '寒露',\n '霜降',\n '立冬',\n '小雪',\n '大雪',\n '冬至',\n '小寒',\n '大寒',\n] as const;\n\n// 节气分组\nexport const JIEQI_GROUPS = [\n ['立春', '雨水', '驚蟄'],\n ['春分', '清明', '穀雨'],\n ['立夏', '小滿', '芒種'],\n ['夏至', '小暑', '大暑'],\n ['立秋', '處暑', '白露'],\n ['秋分', '寒露', '霜降'],\n ['立冬', '小雪', '大雪'],\n ['冬至', '小寒', '大寒'],\n] as const;\n\n// 地支转卦\nexport const ZHI_TO_GUA: Record<string, string> = {\n 子: '坎',\n 寅: '震',\n 卯: '震',\n 辰: '巽',\n 巳: '巽',\n 午: '離',\n 申: '兌',\n 酉: '兌',\n 戌: '乾',\n 亥: '乾',\n 丑: '中',\n 未: '中',\n};\n\n// 将军\nexport const GENERAL_MAP: Record<string, string> = {\n 子: '子',\n 丑: '酉',\n 寅: '午',\n 卯: '卯',\n 辰: '子',\n 巳: '酉',\n 午: '午',\n 未: '卯',\n 申: '子',\n 酉: '酉',\n 戌: '午',\n 亥: '卯',\n};\n\n// 阴阳\nexport const YIN_YANG: Record<string, '陽' | '陰'> = {\n 甲: '陽',\n 丙: '陽',\n 戊: '陽',\n 庚: '陽',\n 壬: '陽',\n 乙: '陰',\n 丁: '陰',\n 己: '陰',\n 辛: '陰',\n 癸: '陰',\n};\n\n// 孤虚配置\nexport const GU_XU_CONFIG = [\n { 陽: { 孤: '戌', 虛: '辰' }, 陰: { 孤: '亥', 虛: '巳' } },\n { 陽: { 孤: '申', 虛: '寅' }, 陰: { 孤: '酉', 虛: '卯' } },\n { 陽: { 孤: '午', 虛: '子' }, 陰: { 孤: '未', 虛: '丑' } },\n { 陽: { 孤: '辰', 虛: '戌' }, 陰: { 孤: '巳', 虛: '亥' } },\n { 陽: { 孤: '寅', 虛: '申' }, 陰: { 孤: '卯', 虛: '酉' } },\n { 陽: { 孤: '子', 虛: '午' }, 陰: { 孤: '丑', 虛: '未' } },\n];\n\n// 五行生克关系\nexport const WU_XING_RELATION: Record<string, string> = {\n 木木: '比和',\n 木火: '我生',\n 木土: '我尅',\n 木金: '尅我',\n 木水: '生我',\n 火木: '生我',\n 火火: '比和',\n 火土: '我生',\n 火金: '我尅',\n 火水: '尅我',\n 土木: '尅我',\n 土火: '生我',\n 土土: '比和',\n 土金: '我生',\n 土水: '我尅',\n 金木: '我尅',\n 金火: '尅我',\n 金土: '生我',\n 金金: '比和',\n 金水: '我生',\n 水木: '我生',\n 水火: '尅我',\n 水土: '尅我',\n 水金: '生我',\n 水水: '比和',\n};\n\n// 六亲\nexport const LIU_QIN_MAP: Record<string, string> = {\n 尅我: '官鬼',\n 我尅: '妻財',\n 比和: '兄弟',\n 生我: '父母',\n 我生: '子孫',\n};\n\n// 宫位\nexport const GONG_WEI = ['巽宮', '震宮', '離宮', '中宮', '兌宮', '坎宮'] as const;\n\n// 宫位标签\nexport const GONG_WEI_LABELS = ['兆', '木鄉', '火鄉', '土鄉', '金鄉', '水鄉'] as const;\n","/**\n * 五兆占卜系统 - 工具函数\n */\n\nimport { TIAN_GAN, DI_ZHI } from './constants.js';\n\n/**\n * 生成六十甲子\n */\nexport function generateJiaZi(): string[] {\n const result: string[] = [];\n for (let i = 0; i < 60; i++) {\n result.push(TIAN_GAN[i % 10] + DI_ZHI[i % 12]);\n }\n return result;\n}\n\n/**\n * 获取六十甲子\n */\nexport const JIAZI = generateJiaZi();\n\n/**\n * 旋转数组\n */\nexport function rotateArray<T>(arr: T[], shift: number): T[] {\n const normalizedShift = shift % arr.length;\n return [...arr.slice(normalizedShift), ...arr.slice(0, normalizedShift)];\n}\n\n/**\n * 创建新列表(从指定元素开始)\n */\nexport function newList<T>(list: T[], element: T): T[] {\n const index = list.indexOf(element);\n if (index === -1) return list;\n return rotateArray(list, index);\n}\n\n/**\n * 多键字典查找\n */\nexport function multiKeyDictGet<K, V>(\n dict: Map<K[], V> | Record<string, V>,\n key: K\n): V | undefined {\n if (dict instanceof Map) {\n for (const [keys, value] of dict.entries()) {\n if (keys.includes(key)) {\n return value;\n }\n }\n } else {\n for (const [keysStr, value] of Object.entries(dict)) {\n const keys = keysStr.split(',');\n if (keys.includes(String(key))) {\n return value;\n }\n }\n }\n return undefined;\n}\n\n/**\n * 随机分割(返回左边部分)\n */\nexport function randomSplit(total: number): number {\n if (total <= 1) return 1;\n return Math.floor(Math.random() * (total - 1)) + 1;\n}\n\n/**\n * 获取六甲旬\n */\nexport function getLiuJiaXun(): Map<string[], string> {\n const xunMap = new Map<string[], string>();\n for (let i = 0; i < 6; i++) {\n const startGanZhi = JIAZI[i * 10];\n const xun = JIAZI.slice(i * 10, i * 10 + 10);\n xunMap.set(xun, startGanZhi);\n }\n return xunMap;\n}\n\n/**\n * 五鼠遁 - 根据日干支推算时辰干支\n */\nexport function findLunarHour(dayGanZhi: string): Record<string, string> {\n const fiveRats: Record<string, string> = {\n 甲: '甲子',\n 己: '甲子',\n 乙: '丙子',\n 庚: '丙子',\n 丙: '戊子',\n 辛: '戊子',\n 丁: '庚子',\n 壬: '庚子',\n 戊: '壬子',\n 癸: '壬子',\n };\n\n const dayGan = dayGanZhi[0];\n const startGanZhi = fiveRats[dayGan];\n if (!startGanZhi) return {};\n\n const hourList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<string, string> = {};\n DI_ZHI.forEach((zhi, index) => {\n result[zhi] = hourList[index];\n });\n\n return result;\n}\n\n/**\n * 五虎遁 - 根据年干支推算月份干支\n */\nexport function findLunarMonth(yearGanZhi: string): Record<number, string> {\n const fiveTigers: Record<string, string> = {\n 甲: '丙寅',\n 己: '丙寅',\n 乙: '戊寅',\n 庚: '戊寅',\n 丙: '庚寅',\n 辛: '庚寅',\n 丁: '壬寅',\n 壬: '壬寅',\n 戊: '甲寅',\n 癸: '甲寅',\n };\n\n const yearGan = yearGanZhi[0];\n const startGanZhi = fiveTigers[yearGan];\n if (!startGanZhi) return {};\n\n const monthList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<number, string> = {};\n for (let i = 0; i < 12; i++) {\n result[i + 1] = monthList[i];\n }\n\n return result;\n}\n\n/**\n * 五马遁 - 根据子时干支推算刻干支(每10分钟一个干支)\n * 对应Python版本的find_lunar_ke函数\n */\nexport function findLunarKe(hourGanZhi: string): string[] {\n const fiveHorses: Record<string, string> = {\n 丙: '甲午',\n 辛: '甲午',\n 丁: '丙午',\n 壬: '丙午',\n 戊: '戊午',\n 癸: '戊午',\n 甲: '庚午',\n 己: '庚午',\n 乙: '壬午',\n 庚: '壬午',\n };\n\n const hourGan = hourGanZhi[0];\n const startGanZhi = fiveHorses[hourGan];\n if (!startGanZhi) return JIAZI;\n\n return newList(JIAZI, startGanZhi);\n}\n\n/**\n * 获取干支对应的五行\n */\nexport function getWuXing(ganOrZhi: string): string {\n const wuXingMap: Record<string, string> = {\n 甲: '木',\n 乙: '木',\n 寅: '木',\n 卯: '木',\n 震: '木',\n 巽: '木',\n 丙: '火',\n 丁: '火',\n 巳: '火',\n 午: '火',\n 離: '火',\n 壬: '水',\n 癸: '水',\n 亥: '水',\n 子: '水',\n 坎: '水',\n 庚: '金',\n 辛: '金',\n 申: '金',\n 酉: '金',\n 乾: '金',\n 兌: '金',\n 未: '土',\n 丑: '土',\n 戊: '土',\n 己: '土',\n 辰: '土',\n 戌: '土',\n 艮: '土',\n 坤: '土',\n };\n\n return wuXingMap[ganOrZhi] || '';\n}\n\n/**\n * 双向映射类\n */\nexport class BiDict<K, V> {\n private forward = new Map<K, V>();\n private backward = new Map<V, K>();\n\n set(key: K, value: V): void {\n this.forward.set(key, value);\n this.backward.set(value, key);\n }\n\n get(key: K): V | undefined {\n return this.forward.get(key);\n }\n\n getInverse(value: V): K | undefined {\n return this.backward.get(value);\n }\n\n get inverse() {\n return {\n get: (value: V) => this.getInverse(value),\n };\n }\n}\n","/**\n * 五兆占卜系统 - 干支计算模块\n * 使用tyme4ts计算天干地支\n */\n\nimport { SolarTime } from 'tyme4ts';\nimport { findLunarKe, JIAZI, newList } from './utils.js';\n\n/**\n * 干支结果\n */\nexport interface GanZhiResult {\n year: string; // 年干支\n month: string; // 月干支\n day: string; // 日干支\n hour: string; // 时干支\n minute: string; // 分干支\n}\n\n/**\n * 将公历日期转换为干支\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 干支结果\n */\nexport function ganZhi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): GanZhiResult {\n // 处理23点的特殊情况(算作第二天的子时)\n let adjustedYear = year;\n let adjustedMonth = month;\n let adjustedDay = day;\n let adjustedHour = hour;\n\n if (hour === 23) {\n const nextDay = new Date(year, month - 1, day + 1);\n adjustedYear = nextDay.getFullYear();\n adjustedMonth = nextDay.getMonth() + 1;\n adjustedDay = nextDay.getDate();\n adjustedHour = 0;\n }\n\n // 使用tyme4ts获取八字\n const solarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, adjustedHour, minute, 0);\n const lunarHour = solarTime.getLunarHour();\n const eightChar = lunarHour.getEightChar();\n\n const yearGanZhi = eightChar.getYear().getName();\n const monthGanZhi = eightChar.getMonth().getName();\n const dayGanZhi = eightChar.getDay().getName();\n const hourGanZhi = eightChar.getHour().getName();\n\n // 计算刻干支(使用五马遁,每10分钟一个干支)\n // 获取当天子时的干支\n const ziSolarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, 0, 0, 0);\n const ziLunarHour = ziSolarTime.getLunarHour();\n const ziEightChar = ziLunarHour.getEightChar();\n const ziGanZhi = ziEightChar.getHour().getName();\n const minuteGanZhi = getMinuteGanZhi(ziGanZhi, adjustedHour, minute);\n\n return {\n year: yearGanZhi,\n month: monthGanZhi,\n day: dayGanZhi,\n hour: hourGanZhi,\n minute: minuteGanZhi,\n };\n}\n\n/**\n * 根据子时干支和具体时间计算分钟干支(刻干支)\n * 每10分钟对应一个干支,对应Python版本的ke_jiazi_d函数\n */\nfunction getMinuteGanZhi(ziGanZhi: string, hour: number, minute: number): string {\n const keList = findLunarKe(ziGanZhi);\n\n // 将分钟取整到10分钟(00, 10, 20, 30, 40, 50)\n const roundedMinute = Math.floor(minute / 10) * 10;\n\n // 计算索引:每小时6个刻,每天144个刻,循环60个干支\n const keIndex = (hour * 6 + Math.floor(roundedMinute / 10)) % 60;\n\n return keList[keIndex];\n}\n\n/**\n * 获取时辰对应的地支\n */\nexport function getHourZhi(hour: number): string {\n const zhiMap = [\n '子',\n '丑',\n '丑',\n '寅',\n '寅',\n '卯',\n '卯',\n '辰',\n '辰',\n '巳',\n '巳',\n '午',\n '午',\n '未',\n '未',\n '申',\n '申',\n '酉',\n '酉',\n '戌',\n '戌',\n '亥',\n '亥',\n '子',\n ];\n return zhiMap[hour] || '子';\n}\n\n/**\n * 生成干支表(用于调试)\n */\nexport function generateGanZhiTable(startYear: number, endYear: number): void {\n for (let year = startYear; year <= endYear; year++) {\n const result = ganZhi(year, 1, 1, 0, 0);\n console.log(`${year}年: ${result.year} ${result.month} ${result.day} ${result.hour}`);\n }\n}\n","/**\n * 五兆占卜系统 - 节气计算模块\n * 使用tyme4ts计算二十四节气\n */\n\nimport { SolarTime } from 'tyme4ts';\n\n/**\n * 根据日期查找当前节气\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 当前节气名称\n */\nexport function findCurrentJieQi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): string {\n const solarTime = SolarTime.fromYmdHms(year, month, day, hour, minute, 0);\n const term = solarTime.getTerm();\n return term.getName();\n}\n\n/**\n * 根据节气查找季节\n */\nexport function findSeason(jieqi: string): string {\n const seasons: Record<string, string> = {\n 立春: '春',\n 雨水: '春',\n 驚蟄: '春',\n 春分: '春',\n 清明: '春',\n 穀雨: '春',\n 立夏: '夏',\n 小滿: '夏',\n 芒種: '夏',\n 夏至: '夏',\n 小暑: '夏',\n 大暑: '夏',\n 立秋: '秋',\n 處暑: '秋',\n 白露: '秋',\n 秋分: '秋',\n 寒露: '秋',\n 霜降: '秋',\n 立冬: '冬',\n 小雪: '冬',\n 大雪: '冬',\n 冬至: '冬',\n 小寒: '冬',\n 大寒: '冬',\n };\n\n return seasons[jieqi] || '';\n}\n","/**\n * 五兆占卜系统 - 核心排盘模块\n */\n\nimport {\n NUM_TO_ELEMENT,\n SIX_BEASTS,\n DAY_GAN_TO_BEAST,\n SIX_BEAST_WEAKNESS,\n YIN_YANG,\n GU_XU_CONFIG,\n ZHI_TO_GUA,\n GENERAL_MAP,\n WU_XING_RELATION,\n LIU_QIN_MAP,\n GONG_WEI,\n GONG_WEI_LABELS,\n BA_GUA,\n WANG_XIANG,\n JIEQI_GROUPS,\n} from './constants.js';\nimport { randomSplit, BiDict, getWuXing, JIAZI, rotateArray } from './utils.js';\nimport { GanZhiResult } from './ganzhi.js';\n\n/**\n * 宫位信息\n */\nexport interface GongWeiInfo {\n 宮位: string; // 宫位名称\n 宮位1: string; // 宫位八卦\n 旺相: string; // 旺相状态\n 數字: number; // 数字(1-5)\n 五行: string; // 五行\n 六獸: string; // 六兽\n 六獸死: string; // 六兽死\n 六獸害: string; // 六兽害\n 六親: string; // 六亲\n 孤: string; // 孤\n 虛: string; // 虚\n 關: string; // 关\n 籥: string; // 钥\n 將軍: string; // 将军\n}\n\n/**\n * 五兆排盘结果\n */\nexport interface WuZhaoPaiPanResult {\n 兆?: GongWeiInfo;\n 木鄉?: GongWeiInfo;\n 火鄉?: GongWeiInfo;\n 土鄉?: GongWeiInfo;\n 金鄉?: GongWeiInfo;\n 水鄉?: GongWeiInfo;\n 錯誤?: string;\n}\n\n/**\n * 节气旺相配置\n */\nfunction buildJieQiWangXiang(): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n JIEQI_GROUPS.forEach((group, index) => {\n const rotated = rotateArray(BA_GUA as unknown as string[], index);\n const mapping: Record<string, string> = {};\n rotated.forEach((gua, i) => {\n mapping[gua] = WANG_XIANG[i];\n });\n\n group.forEach((jieqi) => {\n result[jieqi] = mapping;\n });\n });\n\n return result;\n}\n\nconst JIEQI_WANG_XIANG = buildJieQiWangXiang();\n\n/**\n * 四季关籥配置\n */\nconst SOLAR_TERMS_BY_SEASON: Array<{ terms: string[]; guan: string; yue: string }> = [\n { terms: ['立春', '雨水', '驚蟄', '春分', '清明', '穀雨'], guan: '丑', yue: '巳' },\n { terms: ['立夏', '小滿', '芒種', '夏至', '小暑', '大暑'], guan: '辰', yue: '申' },\n { terms: ['立秋', '處暑', '白露', '秋分', '寒露', '霜降'], guan: '未', yue: '亥' },\n { terms: ['立冬', '小雪', '大雪', '冬至', '小寒', '大寒'], guan: '戌', yue: '寅' },\n];\n\n/**\n * 根据节气获取关籥\n */\nfunction getGuanYue(jieqi: string): { 關: string; 籥: string } | null {\n for (const season of SOLAR_TERMS_BY_SEASON) {\n if (season.terms.includes(jieqi)) {\n return { 關: season.guan, 籥: season.yue };\n }\n }\n return null;\n}\n\n/**\n * 五兆随机分配排盘\n * @param num 起卦数字\n * @param jq 节气\n * @param cm 农历月\n * @param gz1 干支1(用于配六兽)\n * @param gz2 干支2(时辰干支,用于孤虚)\n * @param liurenData 六壬数据(地转天盘)\n * @returns 五兆排盘结果\n */\nexport function fiveZhaoPaiPan(\n num: number,\n jq: string,\n cm: string,\n gz1: string,\n gz2: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const dayGan = gz1[0];\n\n // 验证日干\n if (!(dayGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n const base = 36;\n const result: WuZhaoPaiPanResult = {};\n\n // 确定六兽序列\n const beastStart = DAY_GAN_TO_BEAST[dayGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘(如果提供了六壬数据)\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[gz2[1]] || gz2[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const gz2Index = Math.floor(JIAZI.indexOf(gz2) / 10);\n const guxuConfig = GU_XU_CONFIG[gz2Index];\n const yinYang = YIN_YANG[gz2[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置\n const positions: Array<[string, string]> = [\n ['巽宮', '兆'],\n ['震宮', '木鄉'],\n ['離宮', '火鄉'],\n ['中宮', '土鄉'],\n ['兌宮', '金鄉'],\n ['坎宮', '水鄉'],\n ];\n\n let remain = base;\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label] = positions[idx];\n const left = randomSplit(remain);\n let zhaoNum = left % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n\n remain -= zhaoNum;\n if (remain <= 0) break;\n }\n\n return result;\n}\n\n/**\n * 干支起盘(根据年月日时分干支计算)\n * @param gzList 干支列表 [年, 月, 日, 时, 分]\n * @param num 额外数字\n * @param jq 节气\n * @param cm 农历月\n * @param liurenData 六壬数据\n * @returns 五兆排盘结果\n */\nexport function ganzhiPaiPan(\n gzList: GanZhiResult,\n num: number,\n jq: string,\n cm: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const { year, month, day, hour, minute } = gzList;\n\n // 验证分钟干支的天干(Python版本使用mi[0])\n const minuteGan = minute[0];\n if (!(minuteGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n // 甲子序号映射\n const jz2num: Record<string, number> = {};\n JIAZI.forEach((gz, index) => {\n jz2num[gz] = index + 1;\n });\n\n // 确定六兽序列(使用分钟干支的天干)\n const beastStart = DAY_GAN_TO_BEAST[minuteGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[minute[1]] || minute[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const minuteIndex = Math.floor(JIAZI.indexOf(minute) / 10);\n const guxuConfig = GU_XU_CONFIG[minuteIndex];\n const yinYang = YIN_YANG[minute[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置(每个宫位使用不同的干支组合)\n const positions: Array<[string, string, string[]]> = [\n ['巽宮', '兆', [year, month, day, hour, minute]],\n ['震宮', '木鄉', [month, day, hour, minute]],\n ['離宮', '火鄉', [day, hour, minute]],\n ['中宮', '土鄉', [hour, minute]],\n ['兌宮', '金鄉', [minute]],\n ['坎宮', '水鄉', []],\n ];\n\n const result: WuZhaoPaiPanResult = {};\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label, parts] = positions[idx];\n\n // 计算总数\n let total = num;\n for (const part of parts) {\n total += jz2num[part] || (typeof part === 'number' ? part : 0);\n }\n\n let zhaoNum = total % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/utils.ts","../src/ganzhi.ts","../src/jieqi.ts","../src/kinwuzhao.ts"],"names":["SolarTime","key"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 五兆占卜系统 - 常量定义\n * 包含天干地支、五行、八卦等基础常量\n */\n\n// 天干地支\nexport const TIAN_GAN = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] as const;\nexport const DI_ZHI = [\n '子',\n '丑',\n '寅',\n '卯',\n '辰',\n '巳',\n '午',\n '未',\n '申',\n '酉',\n '戌',\n '亥',\n] as const;\n\n// 数字对应五行\nexport const NUM_TO_ELEMENT: Record<number, string> = {\n 1: '水',\n 2: '火',\n 3: '木',\n 4: '金',\n 5: '土',\n};\n\n// 五行\nexport const WU_XING = ['木', '火', '土', '金', '水'] as const;\n\n// 八卦\nexport const BA_GUA = ['艮', '震', '巽', '離', '坤', '兌', '乾', '坎'] as const;\n\n// 旺相胎沒死囚廢休\nexport const WANG_XIANG = ['王', '相', '胎', '沒', '死', '囚', '廢', '休'] as const;\n\n// 六兽序列\nexport const SIX_BEASTS = ['青龍', '朱雀', '螣蛇', '勾陳', '白虎', '玄武'] as const;\n\n// 六兽弱点\nexport const SIX_BEAST_WEAKNESS: Record<string, [string, string]> = {\n 青龍: ['坤', '兌'],\n 朱雀: ['坎', '巽'],\n 螣蛇: ['坎', '巽'],\n 勾陳: ['巽', '巽'],\n 白虎: ['坎', '離'],\n 玄武: ['巽', '震'],\n};\n\n// 日干对应起六兽首位\nexport const DAY_GAN_TO_BEAST: Record<string, string> = {\n 甲: '青龍',\n 乙: '青龍',\n 丙: '朱雀',\n 丁: '朱雀',\n 戊: '勾陳',\n 己: '勾陳',\n 庚: '白虎',\n 辛: '白虎',\n 壬: '玄武',\n 癸: '玄武',\n};\n\n// 二十四节气\nexport const TWENTY_FOUR_SOLAR_TERMS = [\n '立春',\n '雨水',\n '驚蟄',\n '春分',\n '清明',\n '穀雨',\n '立夏',\n '小滿',\n '芒種',\n '夏至',\n '小暑',\n '大暑',\n '立秋',\n '處暑',\n '白露',\n '秋分',\n '寒露',\n '霜降',\n '立冬',\n '小雪',\n '大雪',\n '冬至',\n '小寒',\n '大寒',\n] as const;\n\n// 节气分组\nexport const JIEQI_GROUPS = [\n ['立春', '雨水', '驚蟄'],\n ['春分', '清明', '穀雨'],\n ['立夏', '小滿', '芒種'],\n ['夏至', '小暑', '大暑'],\n ['立秋', '處暑', '白露'],\n ['秋分', '寒露', '霜降'],\n ['立冬', '小雪', '大雪'],\n ['冬至', '小寒', '大寒'],\n] as const;\n\n// 地支转卦\nexport const ZHI_TO_GUA: Record<string, string> = {\n 子: '坎',\n 寅: '震',\n 卯: '震',\n 辰: '巽',\n 巳: '巽',\n 午: '離',\n 申: '兌',\n 酉: '兌',\n 戌: '乾',\n 亥: '乾',\n 丑: '中',\n 未: '中',\n};\n\n// 将军\nexport const GENERAL_MAP: Record<string, string> = {\n 子: '子',\n 丑: '酉',\n 寅: '午',\n 卯: '卯',\n 辰: '子',\n 巳: '酉',\n 午: '午',\n 未: '卯',\n 申: '子',\n 酉: '酉',\n 戌: '午',\n 亥: '卯',\n};\n\n// 阴阳\nexport const YIN_YANG: Record<string, '陽' | '陰'> = {\n 甲: '陽',\n 丙: '陽',\n 戊: '陽',\n 庚: '陽',\n 壬: '陽',\n 乙: '陰',\n 丁: '陰',\n 己: '陰',\n 辛: '陰',\n 癸: '陰',\n};\n\n// 孤虚配置\nexport const GU_XU_CONFIG = [\n { 陽: { 孤: '戌', 虛: '辰' }, 陰: { 孤: '亥', 虛: '巳' } },\n { 陽: { 孤: '申', 虛: '寅' }, 陰: { 孤: '酉', 虛: '卯' } },\n { 陽: { 孤: '午', 虛: '子' }, 陰: { 孤: '未', 虛: '丑' } },\n { 陽: { 孤: '辰', 虛: '戌' }, 陰: { 孤: '巳', 虛: '亥' } },\n { 陽: { 孤: '寅', 虛: '申' }, 陰: { 孤: '卯', 虛: '酉' } },\n { 陽: { 孤: '子', 虛: '午' }, 陰: { 孤: '丑', 虛: '未' } },\n];\n\n// 五行生克关系\nexport const WU_XING_RELATION: Record<string, string> = {\n 木木: '比和',\n 木火: '我生',\n 木土: '我尅',\n 木金: '尅我',\n 木水: '生我',\n 火木: '生我',\n 火火: '比和',\n 火土: '我生',\n 火金: '我尅',\n 火水: '尅我',\n 土木: '尅我',\n 土火: '生我',\n 土土: '比和',\n 土金: '我生',\n 土水: '我尅',\n 金木: '我尅',\n 金火: '尅我',\n 金土: '生我',\n 金金: '比和',\n 金水: '我生',\n 水木: '我生',\n 水火: '我尅',\n 水土: '尅我',\n 水金: '生我',\n 水水: '比和',\n};\n\n// 六亲\nexport const LIU_QIN_MAP: Record<string, string> = {\n 尅我: '官鬼',\n 我尅: '妻財',\n 比和: '兄弟',\n 生我: '父母',\n 我生: '子孫',\n};\n\n// 宫位\nexport const GONG_WEI = ['巽宮', '震宮', '離宮', '中宮', '兌宮', '坎宮'] as const;\n\n// 宫位标签\nexport const GONG_WEI_LABELS = ['兆', '木鄉', '火鄉', '土鄉', '金鄉', '水鄉'] as const;\n","/**\n * 五兆占卜系统 - 工具函数\n */\n\nimport { TIAN_GAN, DI_ZHI } from './constants.js';\n\n/**\n * 生成六十甲子\n */\nexport function generateJiaZi(): string[] {\n const result: string[] = [];\n for (let i = 0; i < 60; i++) {\n result.push(TIAN_GAN[i % 10] + DI_ZHI[i % 12]);\n }\n return result;\n}\n\n/**\n * 获取六十甲子\n */\nexport const JIAZI = generateJiaZi();\n\n/**\n * 旋转数组\n */\nexport function rotateArray<T>(arr: T[], shift: number): T[] {\n const normalizedShift = shift % arr.length;\n return [...arr.slice(normalizedShift), ...arr.slice(0, normalizedShift)];\n}\n\n/**\n * 创建新列表(从指定元素开始)\n */\nexport function newList<T>(list: T[], element: T): T[] {\n const index = list.indexOf(element);\n if (index === -1) return list;\n return rotateArray(list, index);\n}\n\n/**\n * 多键字典查找\n */\nexport function multiKeyDictGet<K, V>(\n dict: Map<K[], V> | Record<string, V>,\n key: K\n): V | undefined {\n if (dict instanceof Map) {\n for (const [keys, value] of dict.entries()) {\n if (keys.includes(key)) {\n return value;\n }\n }\n } else {\n for (const [keysStr, value] of Object.entries(dict)) {\n const keys = keysStr.split(',');\n if (keys.includes(String(key))) {\n return value;\n }\n }\n }\n return undefined;\n}\n\n/**\n * 随机分割(返回左边部分)\n */\nexport function randomSplit(total: number): number {\n if (total <= 1) return 1;\n return Math.floor(Math.random() * (total - 1)) + 1;\n}\n\n/**\n * 获取六甲旬\n */\nexport function getLiuJiaXun(): Map<string[], string> {\n const xunMap = new Map<string[], string>();\n for (let i = 0; i < 6; i++) {\n const startGanZhi = JIAZI[i * 10];\n const xun = JIAZI.slice(i * 10, i * 10 + 10);\n xunMap.set(xun, startGanZhi);\n }\n return xunMap;\n}\n\n/**\n * 五鼠遁 - 根据日干支推算时辰干支\n */\nexport function findLunarHour(dayGanZhi: string): Record<string, string> {\n const fiveRats: Record<string, string> = {\n 甲: '甲子',\n 己: '甲子',\n 乙: '丙子',\n 庚: '丙子',\n 丙: '戊子',\n 辛: '戊子',\n 丁: '庚子',\n 壬: '庚子',\n 戊: '壬子',\n 癸: '壬子',\n };\n\n const dayGan = dayGanZhi[0];\n const startGanZhi = fiveRats[dayGan];\n if (!startGanZhi) return {};\n\n const hourList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<string, string> = {};\n DI_ZHI.forEach((zhi, index) => {\n result[zhi] = hourList[index];\n });\n\n return result;\n}\n\n/**\n * 五虎遁 - 根据年干支推算月份干支\n */\nexport function findLunarMonth(yearGanZhi: string): Record<number, string> {\n const fiveTigers: Record<string, string> = {\n 甲: '丙寅',\n 己: '丙寅',\n 乙: '戊寅',\n 庚: '戊寅',\n 丙: '庚寅',\n 辛: '庚寅',\n 丁: '壬寅',\n 壬: '壬寅',\n 戊: '甲寅',\n 癸: '甲寅',\n };\n\n const yearGan = yearGanZhi[0];\n const startGanZhi = fiveTigers[yearGan];\n if (!startGanZhi) return {};\n\n const monthList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<number, string> = {};\n for (let i = 0; i < 12; i++) {\n result[i + 1] = monthList[i];\n }\n\n return result;\n}\n\n/**\n * 五狗遁 - 根据子时干支推算分干支(每分钟一个干支)\n * 对应Python版本的find_lunar_minute函数\n */\nexport function findLunarMinute(hourGanZhi: string): string[] {\n const fiveDogs: Record<string, string> = {\n 甲: '甲戌',\n 己: '甲戌',\n 乙: '丙戌',\n 庚: '丙戌',\n 丙: '戊戌',\n 辛: '戊戌',\n 丁: '庚戌',\n 壬: '庚戌',\n 戊: '壬戌',\n 癸: '壬戌',\n };\n\n const hourGan = hourGanZhi[0];\n const startGanZhi = fiveDogs[hourGan];\n if (!startGanZhi) return JIAZI;\n\n return newList(JIAZI, startGanZhi);\n}\n\n/**\n * 获取干支对应的五行\n */\nexport function getWuXing(ganOrZhi: string): string {\n const wuXingMap: Record<string, string> = {\n 甲: '木',\n 乙: '木',\n 寅: '木',\n 卯: '木',\n 震: '木',\n 巽: '木',\n 丙: '火',\n 丁: '火',\n 巳: '火',\n 午: '火',\n 離: '火',\n 壬: '水',\n 癸: '水',\n 亥: '水',\n 子: '水',\n 坎: '水',\n 庚: '金',\n 辛: '金',\n 申: '金',\n 酉: '金',\n 乾: '金',\n 兌: '金',\n 未: '土',\n 丑: '土',\n 戊: '土',\n 己: '土',\n 辰: '土',\n 戌: '土',\n 艮: '土',\n 坤: '土',\n };\n\n return wuXingMap[ganOrZhi] || '';\n}\n\n/**\n * 双向映射类\n */\nexport class BiDict<K, V> {\n private forward = new Map<K, V>();\n private backward = new Map<V, K>();\n\n set(key: K, value: V): void {\n this.forward.set(key, value);\n this.backward.set(value, key);\n }\n\n get(key: K): V | undefined {\n return this.forward.get(key);\n }\n\n getInverse(value: V): K | undefined {\n return this.backward.get(value);\n }\n\n get inverse() {\n return {\n get: (value: V) => this.getInverse(value),\n };\n }\n}\n","/**\n * 五兆占卜系统 - 干支计算模块\n * 使用tyme4ts计算天干地支\n */\n\nimport { SolarTime } from 'tyme4ts';\nimport { findLunarMinute, JIAZI, newList } from './utils.js';\n\n/**\n * 干支结果\n */\nexport interface GanZhiResult {\n year: string; // 年干支\n month: string; // 月干支\n day: string; // 日干支\n hour: string; // 时干支\n minute: string; // 分干支\n}\n\n/**\n * 将公历日期转换为干支\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 干支结果\n */\nexport function ganZhi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): GanZhiResult {\n // 处理23点的特殊情况(算作第二天的子时)\n let adjustedYear = year;\n let adjustedMonth = month;\n let adjustedDay = day;\n let adjustedHour = hour;\n\n if (hour === 23) {\n const nextDay = new Date(year, month - 1, day + 1);\n adjustedYear = nextDay.getFullYear();\n adjustedMonth = nextDay.getMonth() + 1;\n adjustedDay = nextDay.getDate();\n adjustedHour = 0;\n }\n\n // 使用tyme4ts获取八字\n const solarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, adjustedHour, minute, 0);\n const lunarHour = solarTime.getLunarHour();\n const eightChar = lunarHour.getEightChar();\n\n const yearGanZhi = eightChar.getYear().getName();\n const monthGanZhi = eightChar.getMonth().getName();\n const dayGanZhi = eightChar.getDay().getName();\n const hourGanZhi = eightChar.getHour().getName();\n\n // 计算刻干支(使用五马遁,每10分钟一个干支)\n // 获取当天子时的干支\n const ziSolarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, 0, 0, 0);\n const ziLunarHour = ziSolarTime.getLunarHour();\n const ziEightChar = ziLunarHour.getEightChar();\n const ziGanZhi = ziEightChar.getHour().getName();\n const minuteGanZhi = getMinuteGanZhi(ziGanZhi, adjustedHour, minute);\n\n return {\n year: yearGanZhi,\n month: monthGanZhi,\n day: dayGanZhi,\n hour: hourGanZhi,\n minute: minuteGanZhi,\n };\n}\n\n/**\n * 根据子时干支和具体时间计算分钟干支\n * 每分钟对应一个干支,60分钟恰好一个完整循环\n * 对应Python版本的minutes_jiazi_d函数\n */\nfunction getMinuteGanZhi(ziGanZhi: string, hour: number, minute: number): string {\n const minuteList = findLunarMinute(ziGanZhi);\n\n // 每分钟一个干支,只取决于分钟值(0-59),与小时无关\n // 60分钟 = 60干支,恰好一个完整循环\n return minuteList[minute];\n}\n\n/**\n * 获取时辰对应的地支\n */\nexport function getHourZhi(hour: number): string {\n const zhiMap = [\n '子',\n '丑',\n '丑',\n '寅',\n '寅',\n '卯',\n '卯',\n '辰',\n '辰',\n '巳',\n '巳',\n '午',\n '午',\n '未',\n '未',\n '申',\n '申',\n '酉',\n '酉',\n '戌',\n '戌',\n '亥',\n '亥',\n '子',\n ];\n return zhiMap[hour] || '子';\n}\n\n/**\n * 生成干支表(用于调试)\n */\nexport function generateGanZhiTable(startYear: number, endYear: number): void {\n for (let year = startYear; year <= endYear; year++) {\n const result = ganZhi(year, 1, 1, 0, 0);\n console.log(`${year}年: ${result.year} ${result.month} ${result.day} ${result.hour}`);\n }\n}\n","/**\n * 五兆占卜系统 - 节气计算模块\n * 使用tyme4ts计算二十四节气\n */\n\nimport { SolarTime } from 'tyme4ts';\n\n/**\n * 根据日期查找当前节气\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 当前节气名称\n */\nexport function findCurrentJieQi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): string {\n const solarTime = SolarTime.fromYmdHms(year, month, day, hour, minute, 0);\n const term = solarTime.getTerm();\n return term.getName();\n}\n\n/**\n * 根据节气查找季节\n */\nexport function findSeason(jieqi: string): string {\n const seasons: Record<string, string> = {\n 立春: '春',\n 雨水: '春',\n 驚蟄: '春',\n 春分: '春',\n 清明: '春',\n 穀雨: '春',\n 立夏: '夏',\n 小滿: '夏',\n 芒種: '夏',\n 夏至: '夏',\n 小暑: '夏',\n 大暑: '夏',\n 立秋: '秋',\n 處暑: '秋',\n 白露: '秋',\n 秋分: '秋',\n 寒露: '秋',\n 霜降: '秋',\n 立冬: '冬',\n 小雪: '冬',\n 大雪: '冬',\n 冬至: '冬',\n 小寒: '冬',\n 大寒: '冬',\n };\n\n return seasons[jieqi] || '';\n}\n","/**\n * 五兆占卜系统 - 核心排盘模块\n */\n\nimport {\n NUM_TO_ELEMENT,\n SIX_BEASTS,\n DAY_GAN_TO_BEAST,\n SIX_BEAST_WEAKNESS,\n YIN_YANG,\n GU_XU_CONFIG,\n ZHI_TO_GUA,\n GENERAL_MAP,\n WU_XING_RELATION,\n LIU_QIN_MAP,\n GONG_WEI,\n GONG_WEI_LABELS,\n BA_GUA,\n WANG_XIANG,\n JIEQI_GROUPS,\n} from './constants.js';\nimport { randomSplit, BiDict, getWuXing, JIAZI, rotateArray } from './utils.js';\nimport { GanZhiResult } from './ganzhi.js';\n\n/**\n * 宫位信息\n */\nexport interface GongWeiInfo {\n 宮位: string; // 宫位名称\n 宮位1: string; // 宫位八卦\n 旺相: string; // 旺相状态\n 數字: number; // 数字(1-5)\n 五行: string; // 五行\n 六獸: string; // 六兽\n 六獸死: string; // 六兽死\n 六獸害: string; // 六兽害\n 六親: string; // 六亲\n 孤: string; // 孤\n 虛: string; // 虚\n 關: string; // 关\n 籥: string; // 钥\n 將軍: string; // 将军\n}\n\n/**\n * 五兆排盘结果\n */\nexport interface WuZhaoPaiPanResult {\n 兆?: GongWeiInfo;\n 木鄉?: GongWeiInfo;\n 火鄉?: GongWeiInfo;\n 土鄉?: GongWeiInfo;\n 金鄉?: GongWeiInfo;\n 水鄉?: GongWeiInfo;\n 錯誤?: string;\n}\n\n/**\n * 节气旺相配置\n */\nfunction buildJieQiWangXiang(): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n JIEQI_GROUPS.forEach((group, index) => {\n const rotated = rotateArray(BA_GUA as unknown as string[], index);\n const mapping: Record<string, string> = {};\n rotated.forEach((gua, i) => {\n mapping[gua] = WANG_XIANG[i];\n });\n\n group.forEach((jieqi) => {\n result[jieqi] = mapping;\n });\n });\n\n return result;\n}\n\nconst JIEQI_WANG_XIANG = buildJieQiWangXiang();\n\n/**\n * 四季关籥配置\n */\nconst SOLAR_TERMS_BY_SEASON: Array<{ terms: string[]; guan: string; yue: string }> = [\n { terms: ['立春', '雨水', '驚蟄', '春分', '清明', '穀雨'], guan: '丑', yue: '巳' },\n { terms: ['立夏', '小滿', '芒種', '夏至', '小暑', '大暑'], guan: '辰', yue: '申' },\n { terms: ['立秋', '處暑', '白露', '秋分', '寒露', '霜降'], guan: '未', yue: '亥' },\n { terms: ['立冬', '小雪', '大雪', '冬至', '小寒', '大寒'], guan: '戌', yue: '寅' },\n];\n\n/**\n * 根据节气获取关籥\n */\nfunction getGuanYue(jieqi: string): { 關: string; 籥: string } | null {\n for (const season of SOLAR_TERMS_BY_SEASON) {\n if (season.terms.includes(jieqi)) {\n return { 關: season.guan, 籥: season.yue };\n }\n }\n return null;\n}\n\n/**\n * 五兆随机分配排盘\n * @param num 起卦数字\n * @param jq 节气\n * @param cm 农历月\n * @param gz1 干支1(用于配六兽)\n * @param gz2 干支2(时辰干支,用于孤虚)\n * @param liurenData 六壬数据(地转天盘)\n * @returns 五兆排盘结果\n */\nexport function fiveZhaoPaiPan(\n num: number,\n jq: string,\n cm: string,\n gz1: string,\n gz2: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const dayGan = gz1[0];\n\n // 验证日干\n if (!(dayGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n const base = 36;\n const result: WuZhaoPaiPanResult = {};\n\n // 确定六兽序列\n const beastStart = DAY_GAN_TO_BEAST[dayGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘(如果提供了六壬数据)\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[gz2[1]] || gz2[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const gz2Index = Math.floor(JIAZI.indexOf(gz2) / 10);\n const guxuConfig = GU_XU_CONFIG[gz2Index];\n const yinYang = YIN_YANG[gz2[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置\n const positions: Array<[string, string]> = [\n ['巽宮', '兆'],\n ['震宮', '木鄉'],\n ['離宮', '火鄉'],\n ['中宮', '土鄉'],\n ['兌宮', '金鄉'],\n ['坎宮', '水鄉'],\n ];\n\n let remain = base;\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label] = positions[idx];\n const left = randomSplit(remain);\n let zhaoNum = left % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n\n remain -= zhaoNum;\n if (remain <= 0) break;\n }\n\n return result;\n}\n\n/**\n * 干支起盘(根据年月日时分干支计算)\n * @param gzList 干支列表 [年, 月, 日, 时, 分]\n * @param num 额外数字\n * @param jq 节气\n * @param cm 农历月\n * @param liurenData 六壬数据\n * @returns 五兆排盘结果\n */\nexport function ganzhiPaiPan(\n gzList: GanZhiResult,\n num: number,\n jq: string,\n cm: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const { year, month, day, hour, minute } = gzList;\n\n // 验证分钟干支的天干(Python版本使用mi[0])\n const minuteGan = minute[0];\n if (!(minuteGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n // 甲子序号映射\n const jz2num: Record<string, number> = {};\n JIAZI.forEach((gz, index) => {\n jz2num[gz] = index + 1;\n });\n\n // 确定六兽序列(使用分钟干支的天干)\n const beastStart = DAY_GAN_TO_BEAST[minuteGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[minute[1]] || minute[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const minuteIndex = Math.floor(JIAZI.indexOf(minute) / 10);\n const guxuConfig = GU_XU_CONFIG[minuteIndex];\n const yinYang = YIN_YANG[minute[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置(每个宫位使用不同的干支组合)\n const positions: Array<[string, string, string[]]> = [\n ['巽宮', '兆', [year, month, day, hour, minute]],\n ['震宮', '木鄉', [month, day, hour, minute]],\n ['離宮', '火鄉', [day, hour, minute]],\n ['中宮', '土鄉', [hour, minute]],\n ['兌宮', '金鄉', [minute]],\n ['坎宮', '水鄉', []],\n ];\n\n const result: WuZhaoPaiPanResult = {};\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label, parts] = positions[idx];\n\n // 计算总数\n let total = num;\n for (const part of parts) {\n total += jz2num[part] || (typeof part === 'number' ? part : 0);\n }\n\n let zhaoNum = total % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n }\n\n return result;\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -143,10 +143,10 @@ declare function findLunarHour(dayGanZhi: string): Record<string, string>;
|
|
|
143
143
|
*/
|
|
144
144
|
declare function findLunarMonth(yearGanZhi: string): Record<number, string>;
|
|
145
145
|
/**
|
|
146
|
-
*
|
|
147
|
-
* 对应Python版本的
|
|
146
|
+
* 五狗遁 - 根据子时干支推算分干支(每分钟一个干支)
|
|
147
|
+
* 对应Python版本的find_lunar_minute函数
|
|
148
148
|
*/
|
|
149
|
-
declare function
|
|
149
|
+
declare function findLunarMinute(hourGanZhi: string): string[];
|
|
150
150
|
/**
|
|
151
151
|
* 获取干支对应的五行
|
|
152
152
|
*/
|
|
@@ -198,4 +198,4 @@ declare const LIU_QIN_MAP: Record<string, string>;
|
|
|
198
198
|
declare const GONG_WEI: readonly ["巽宮", "震宮", "離宮", "中宮", "兌宮", "坎宮"];
|
|
199
199
|
declare const GONG_WEI_LABELS: readonly ["兆", "木鄉", "火鄉", "土鄉", "金鄉", "水鄉"];
|
|
200
200
|
|
|
201
|
-
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, type GanZhiResult, type GongWeiInfo, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, type WuZhaoPaiPanResult, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour,
|
|
201
|
+
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, type GanZhiResult, type GongWeiInfo, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, type WuZhaoPaiPanResult, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour, findLunarMinute, findLunarMonth, findSeason, fiveZhaoPaiPan, ganZhi, ganzhiPaiPan, generateJiaZi, getHourZhi, getLiuJiaXun, getWuXing, multiKeyDictGet, newList, randomSplit, rotateArray };
|
package/dist/index.d.ts
CHANGED
|
@@ -143,10 +143,10 @@ declare function findLunarHour(dayGanZhi: string): Record<string, string>;
|
|
|
143
143
|
*/
|
|
144
144
|
declare function findLunarMonth(yearGanZhi: string): Record<number, string>;
|
|
145
145
|
/**
|
|
146
|
-
*
|
|
147
|
-
* 对应Python版本的
|
|
146
|
+
* 五狗遁 - 根据子时干支推算分干支(每分钟一个干支)
|
|
147
|
+
* 对应Python版本的find_lunar_minute函数
|
|
148
148
|
*/
|
|
149
|
-
declare function
|
|
149
|
+
declare function findLunarMinute(hourGanZhi: string): string[];
|
|
150
150
|
/**
|
|
151
151
|
* 获取干支对应的五行
|
|
152
152
|
*/
|
|
@@ -198,4 +198,4 @@ declare const LIU_QIN_MAP: Record<string, string>;
|
|
|
198
198
|
declare const GONG_WEI: readonly ["巽宮", "震宮", "離宮", "中宮", "兌宮", "坎宮"];
|
|
199
199
|
declare const GONG_WEI_LABELS: readonly ["兆", "木鄉", "火鄉", "土鄉", "金鄉", "水鄉"];
|
|
200
200
|
|
|
201
|
-
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, type GanZhiResult, type GongWeiInfo, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, type WuZhaoPaiPanResult, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour,
|
|
201
|
+
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, type GanZhiResult, type GongWeiInfo, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, type WuZhaoPaiPanResult, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour, findLunarMinute, findLunarMonth, findSeason, fiveZhaoPaiPan, ganZhi, ganzhiPaiPan, generateJiaZi, getHourZhi, getLiuJiaXun, getWuXing, multiKeyDictGet, newList, randomSplit, rotateArray };
|
package/dist/index.js
CHANGED
|
@@ -155,7 +155,7 @@ var WU_XING_RELATION = {
|
|
|
155
155
|
\u91D1\u91D1: "\u6BD4\u548C",
|
|
156
156
|
\u91D1\u6C34: "\u6211\u751F",
|
|
157
157
|
\u6C34\u6728: "\u6211\u751F",
|
|
158
|
-
\u6C34\u706B: "\u5C05
|
|
158
|
+
\u6C34\u706B: "\u6211\u5C05",
|
|
159
159
|
\u6C34\u571F: "\u5C05\u6211",
|
|
160
160
|
\u6C34\u91D1: "\u751F\u6211",
|
|
161
161
|
\u6C34\u6C34: "\u6BD4\u548C"
|
|
@@ -264,21 +264,21 @@ function findLunarMonth(yearGanZhi) {
|
|
|
264
264
|
}
|
|
265
265
|
return result;
|
|
266
266
|
}
|
|
267
|
-
function
|
|
268
|
-
const
|
|
269
|
-
\
|
|
270
|
-
\
|
|
271
|
-
\
|
|
272
|
-
\
|
|
273
|
-
\
|
|
274
|
-
\
|
|
275
|
-
\
|
|
276
|
-
\
|
|
277
|
-
\
|
|
278
|
-
\
|
|
267
|
+
function findLunarMinute(hourGanZhi) {
|
|
268
|
+
const fiveDogs = {
|
|
269
|
+
\u7532: "\u7532\u620C",
|
|
270
|
+
\u5DF1: "\u7532\u620C",
|
|
271
|
+
\u4E59: "\u4E19\u620C",
|
|
272
|
+
\u5E9A: "\u4E19\u620C",
|
|
273
|
+
\u4E19: "\u620A\u620C",
|
|
274
|
+
\u8F9B: "\u620A\u620C",
|
|
275
|
+
\u4E01: "\u5E9A\u620C",
|
|
276
|
+
\u58EC: "\u5E9A\u620C",
|
|
277
|
+
\u620A: "\u58EC\u620C",
|
|
278
|
+
\u7678: "\u58EC\u620C"
|
|
279
279
|
};
|
|
280
280
|
const hourGan = hourGanZhi[0];
|
|
281
|
-
const startGanZhi =
|
|
281
|
+
const startGanZhi = fiveDogs[hourGan];
|
|
282
282
|
if (!startGanZhi) return JIAZI;
|
|
283
283
|
return newList(JIAZI, startGanZhi);
|
|
284
284
|
}
|
|
@@ -371,10 +371,8 @@ function ganZhi(year, month, day, hour, minute) {
|
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
373
|
function getMinuteGanZhi(ziGanZhi, hour, minute) {
|
|
374
|
-
const
|
|
375
|
-
|
|
376
|
-
const keIndex = (hour * 6 + Math.floor(roundedMinute / 10)) % 60;
|
|
377
|
-
return keList[keIndex];
|
|
374
|
+
const minuteList = findLunarMinute(ziGanZhi);
|
|
375
|
+
return minuteList[minute];
|
|
378
376
|
}
|
|
379
377
|
function getHourZhi(hour) {
|
|
380
378
|
const zhiMap = [
|
|
@@ -649,6 +647,6 @@ function ganzhiPaiPan(gzList, num, jq, cm, liurenData) {
|
|
|
649
647
|
return result;
|
|
650
648
|
}
|
|
651
649
|
|
|
652
|
-
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour,
|
|
650
|
+
export { BA_GUA, BiDict, DAY_GAN_TO_BEAST, DI_ZHI, GENERAL_MAP, GONG_WEI, GONG_WEI_LABELS, GU_XU_CONFIG, JIAZI, JIEQI_GROUPS, LIU_QIN_MAP, NUM_TO_ELEMENT, SIX_BEASTS, SIX_BEAST_WEAKNESS, TIAN_GAN, TWENTY_FOUR_SOLAR_TERMS, WANG_XIANG, WU_XING, WU_XING_RELATION, YIN_YANG, ZHI_TO_GUA, findCurrentJieQi, findLunarHour, findLunarMinute, findLunarMonth, findSeason, fiveZhaoPaiPan, ganZhi, ganzhiPaiPan, generateJiaZi, getHourZhi, getLiuJiaXun, getWuXing, multiKeyDictGet, newList, randomSplit, rotateArray };
|
|
653
651
|
//# sourceMappingURL=index.js.map
|
|
654
652
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/utils.ts","../src/ganzhi.ts","../src/jieqi.ts","../src/kinwuzhao.ts"],"names":["SolarTime","key"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 五兆占卜系统 - 常量定义\n * 包含天干地支、五行、八卦等基础常量\n */\n\n// 天干地支\nexport const TIAN_GAN = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] as const;\nexport const DI_ZHI = [\n '子',\n '丑',\n '寅',\n '卯',\n '辰',\n '巳',\n '午',\n '未',\n '申',\n '酉',\n '戌',\n '亥',\n] as const;\n\n// 数字对应五行\nexport const NUM_TO_ELEMENT: Record<number, string> = {\n 1: '水',\n 2: '火',\n 3: '木',\n 4: '金',\n 5: '土',\n};\n\n// 五行\nexport const WU_XING = ['木', '火', '土', '金', '水'] as const;\n\n// 八卦\nexport const BA_GUA = ['艮', '震', '巽', '離', '坤', '兌', '乾', '坎'] as const;\n\n// 旺相胎沒死囚廢休\nexport const WANG_XIANG = ['王', '相', '胎', '沒', '死', '囚', '廢', '休'] as const;\n\n// 六兽序列\nexport const SIX_BEASTS = ['青龍', '朱雀', '螣蛇', '勾陳', '白虎', '玄武'] as const;\n\n// 六兽弱点\nexport const SIX_BEAST_WEAKNESS: Record<string, [string, string]> = {\n 青龍: ['坤', '兌'],\n 朱雀: ['坎', '巽'],\n 螣蛇: ['坎', '巽'],\n 勾陳: ['巽', '巽'],\n 白虎: ['坎', '離'],\n 玄武: ['巽', '震'],\n};\n\n// 日干对应起六兽首位\nexport const DAY_GAN_TO_BEAST: Record<string, string> = {\n 甲: '青龍',\n 乙: '青龍',\n 丙: '朱雀',\n 丁: '朱雀',\n 戊: '勾陳',\n 己: '勾陳',\n 庚: '白虎',\n 辛: '白虎',\n 壬: '玄武',\n 癸: '玄武',\n};\n\n// 二十四节气\nexport const TWENTY_FOUR_SOLAR_TERMS = [\n '立春',\n '雨水',\n '驚蟄',\n '春分',\n '清明',\n '穀雨',\n '立夏',\n '小滿',\n '芒種',\n '夏至',\n '小暑',\n '大暑',\n '立秋',\n '處暑',\n '白露',\n '秋分',\n '寒露',\n '霜降',\n '立冬',\n '小雪',\n '大雪',\n '冬至',\n '小寒',\n '大寒',\n] as const;\n\n// 节气分组\nexport const JIEQI_GROUPS = [\n ['立春', '雨水', '驚蟄'],\n ['春分', '清明', '穀雨'],\n ['立夏', '小滿', '芒種'],\n ['夏至', '小暑', '大暑'],\n ['立秋', '處暑', '白露'],\n ['秋分', '寒露', '霜降'],\n ['立冬', '小雪', '大雪'],\n ['冬至', '小寒', '大寒'],\n] as const;\n\n// 地支转卦\nexport const ZHI_TO_GUA: Record<string, string> = {\n 子: '坎',\n 寅: '震',\n 卯: '震',\n 辰: '巽',\n 巳: '巽',\n 午: '離',\n 申: '兌',\n 酉: '兌',\n 戌: '乾',\n 亥: '乾',\n 丑: '中',\n 未: '中',\n};\n\n// 将军\nexport const GENERAL_MAP: Record<string, string> = {\n 子: '子',\n 丑: '酉',\n 寅: '午',\n 卯: '卯',\n 辰: '子',\n 巳: '酉',\n 午: '午',\n 未: '卯',\n 申: '子',\n 酉: '酉',\n 戌: '午',\n 亥: '卯',\n};\n\n// 阴阳\nexport const YIN_YANG: Record<string, '陽' | '陰'> = {\n 甲: '陽',\n 丙: '陽',\n 戊: '陽',\n 庚: '陽',\n 壬: '陽',\n 乙: '陰',\n 丁: '陰',\n 己: '陰',\n 辛: '陰',\n 癸: '陰',\n};\n\n// 孤虚配置\nexport const GU_XU_CONFIG = [\n { 陽: { 孤: '戌', 虛: '辰' }, 陰: { 孤: '亥', 虛: '巳' } },\n { 陽: { 孤: '申', 虛: '寅' }, 陰: { 孤: '酉', 虛: '卯' } },\n { 陽: { 孤: '午', 虛: '子' }, 陰: { 孤: '未', 虛: '丑' } },\n { 陽: { 孤: '辰', 虛: '戌' }, 陰: { 孤: '巳', 虛: '亥' } },\n { 陽: { 孤: '寅', 虛: '申' }, 陰: { 孤: '卯', 虛: '酉' } },\n { 陽: { 孤: '子', 虛: '午' }, 陰: { 孤: '丑', 虛: '未' } },\n];\n\n// 五行生克关系\nexport const WU_XING_RELATION: Record<string, string> = {\n 木木: '比和',\n 木火: '我生',\n 木土: '我尅',\n 木金: '尅我',\n 木水: '生我',\n 火木: '生我',\n 火火: '比和',\n 火土: '我生',\n 火金: '我尅',\n 火水: '尅我',\n 土木: '尅我',\n 土火: '生我',\n 土土: '比和',\n 土金: '我生',\n 土水: '我尅',\n 金木: '我尅',\n 金火: '尅我',\n 金土: '生我',\n 金金: '比和',\n 金水: '我生',\n 水木: '我生',\n 水火: '尅我',\n 水土: '尅我',\n 水金: '生我',\n 水水: '比和',\n};\n\n// 六亲\nexport const LIU_QIN_MAP: Record<string, string> = {\n 尅我: '官鬼',\n 我尅: '妻財',\n 比和: '兄弟',\n 生我: '父母',\n 我生: '子孫',\n};\n\n// 宫位\nexport const GONG_WEI = ['巽宮', '震宮', '離宮', '中宮', '兌宮', '坎宮'] as const;\n\n// 宫位标签\nexport const GONG_WEI_LABELS = ['兆', '木鄉', '火鄉', '土鄉', '金鄉', '水鄉'] as const;\n","/**\n * 五兆占卜系统 - 工具函数\n */\n\nimport { TIAN_GAN, DI_ZHI } from './constants.js';\n\n/**\n * 生成六十甲子\n */\nexport function generateJiaZi(): string[] {\n const result: string[] = [];\n for (let i = 0; i < 60; i++) {\n result.push(TIAN_GAN[i % 10] + DI_ZHI[i % 12]);\n }\n return result;\n}\n\n/**\n * 获取六十甲子\n */\nexport const JIAZI = generateJiaZi();\n\n/**\n * 旋转数组\n */\nexport function rotateArray<T>(arr: T[], shift: number): T[] {\n const normalizedShift = shift % arr.length;\n return [...arr.slice(normalizedShift), ...arr.slice(0, normalizedShift)];\n}\n\n/**\n * 创建新列表(从指定元素开始)\n */\nexport function newList<T>(list: T[], element: T): T[] {\n const index = list.indexOf(element);\n if (index === -1) return list;\n return rotateArray(list, index);\n}\n\n/**\n * 多键字典查找\n */\nexport function multiKeyDictGet<K, V>(\n dict: Map<K[], V> | Record<string, V>,\n key: K\n): V | undefined {\n if (dict instanceof Map) {\n for (const [keys, value] of dict.entries()) {\n if (keys.includes(key)) {\n return value;\n }\n }\n } else {\n for (const [keysStr, value] of Object.entries(dict)) {\n const keys = keysStr.split(',');\n if (keys.includes(String(key))) {\n return value;\n }\n }\n }\n return undefined;\n}\n\n/**\n * 随机分割(返回左边部分)\n */\nexport function randomSplit(total: number): number {\n if (total <= 1) return 1;\n return Math.floor(Math.random() * (total - 1)) + 1;\n}\n\n/**\n * 获取六甲旬\n */\nexport function getLiuJiaXun(): Map<string[], string> {\n const xunMap = new Map<string[], string>();\n for (let i = 0; i < 6; i++) {\n const startGanZhi = JIAZI[i * 10];\n const xun = JIAZI.slice(i * 10, i * 10 + 10);\n xunMap.set(xun, startGanZhi);\n }\n return xunMap;\n}\n\n/**\n * 五鼠遁 - 根据日干支推算时辰干支\n */\nexport function findLunarHour(dayGanZhi: string): Record<string, string> {\n const fiveRats: Record<string, string> = {\n 甲: '甲子',\n 己: '甲子',\n 乙: '丙子',\n 庚: '丙子',\n 丙: '戊子',\n 辛: '戊子',\n 丁: '庚子',\n 壬: '庚子',\n 戊: '壬子',\n 癸: '壬子',\n };\n\n const dayGan = dayGanZhi[0];\n const startGanZhi = fiveRats[dayGan];\n if (!startGanZhi) return {};\n\n const hourList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<string, string> = {};\n DI_ZHI.forEach((zhi, index) => {\n result[zhi] = hourList[index];\n });\n\n return result;\n}\n\n/**\n * 五虎遁 - 根据年干支推算月份干支\n */\nexport function findLunarMonth(yearGanZhi: string): Record<number, string> {\n const fiveTigers: Record<string, string> = {\n 甲: '丙寅',\n 己: '丙寅',\n 乙: '戊寅',\n 庚: '戊寅',\n 丙: '庚寅',\n 辛: '庚寅',\n 丁: '壬寅',\n 壬: '壬寅',\n 戊: '甲寅',\n 癸: '甲寅',\n };\n\n const yearGan = yearGanZhi[0];\n const startGanZhi = fiveTigers[yearGan];\n if (!startGanZhi) return {};\n\n const monthList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<number, string> = {};\n for (let i = 0; i < 12; i++) {\n result[i + 1] = monthList[i];\n }\n\n return result;\n}\n\n/**\n * 五马遁 - 根据子时干支推算刻干支(每10分钟一个干支)\n * 对应Python版本的find_lunar_ke函数\n */\nexport function findLunarKe(hourGanZhi: string): string[] {\n const fiveHorses: Record<string, string> = {\n 丙: '甲午',\n 辛: '甲午',\n 丁: '丙午',\n 壬: '丙午',\n 戊: '戊午',\n 癸: '戊午',\n 甲: '庚午',\n 己: '庚午',\n 乙: '壬午',\n 庚: '壬午',\n };\n\n const hourGan = hourGanZhi[0];\n const startGanZhi = fiveHorses[hourGan];\n if (!startGanZhi) return JIAZI;\n\n return newList(JIAZI, startGanZhi);\n}\n\n/**\n * 获取干支对应的五行\n */\nexport function getWuXing(ganOrZhi: string): string {\n const wuXingMap: Record<string, string> = {\n 甲: '木',\n 乙: '木',\n 寅: '木',\n 卯: '木',\n 震: '木',\n 巽: '木',\n 丙: '火',\n 丁: '火',\n 巳: '火',\n 午: '火',\n 離: '火',\n 壬: '水',\n 癸: '水',\n 亥: '水',\n 子: '水',\n 坎: '水',\n 庚: '金',\n 辛: '金',\n 申: '金',\n 酉: '金',\n 乾: '金',\n 兌: '金',\n 未: '土',\n 丑: '土',\n 戊: '土',\n 己: '土',\n 辰: '土',\n 戌: '土',\n 艮: '土',\n 坤: '土',\n };\n\n return wuXingMap[ganOrZhi] || '';\n}\n\n/**\n * 双向映射类\n */\nexport class BiDict<K, V> {\n private forward = new Map<K, V>();\n private backward = new Map<V, K>();\n\n set(key: K, value: V): void {\n this.forward.set(key, value);\n this.backward.set(value, key);\n }\n\n get(key: K): V | undefined {\n return this.forward.get(key);\n }\n\n getInverse(value: V): K | undefined {\n return this.backward.get(value);\n }\n\n get inverse() {\n return {\n get: (value: V) => this.getInverse(value),\n };\n }\n}\n","/**\n * 五兆占卜系统 - 干支计算模块\n * 使用tyme4ts计算天干地支\n */\n\nimport { SolarTime } from 'tyme4ts';\nimport { findLunarKe, JIAZI, newList } from './utils.js';\n\n/**\n * 干支结果\n */\nexport interface GanZhiResult {\n year: string; // 年干支\n month: string; // 月干支\n day: string; // 日干支\n hour: string; // 时干支\n minute: string; // 分干支\n}\n\n/**\n * 将公历日期转换为干支\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 干支结果\n */\nexport function ganZhi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): GanZhiResult {\n // 处理23点的特殊情况(算作第二天的子时)\n let adjustedYear = year;\n let adjustedMonth = month;\n let adjustedDay = day;\n let adjustedHour = hour;\n\n if (hour === 23) {\n const nextDay = new Date(year, month - 1, day + 1);\n adjustedYear = nextDay.getFullYear();\n adjustedMonth = nextDay.getMonth() + 1;\n adjustedDay = nextDay.getDate();\n adjustedHour = 0;\n }\n\n // 使用tyme4ts获取八字\n const solarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, adjustedHour, minute, 0);\n const lunarHour = solarTime.getLunarHour();\n const eightChar = lunarHour.getEightChar();\n\n const yearGanZhi = eightChar.getYear().getName();\n const monthGanZhi = eightChar.getMonth().getName();\n const dayGanZhi = eightChar.getDay().getName();\n const hourGanZhi = eightChar.getHour().getName();\n\n // 计算刻干支(使用五马遁,每10分钟一个干支)\n // 获取当天子时的干支\n const ziSolarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, 0, 0, 0);\n const ziLunarHour = ziSolarTime.getLunarHour();\n const ziEightChar = ziLunarHour.getEightChar();\n const ziGanZhi = ziEightChar.getHour().getName();\n const minuteGanZhi = getMinuteGanZhi(ziGanZhi, adjustedHour, minute);\n\n return {\n year: yearGanZhi,\n month: monthGanZhi,\n day: dayGanZhi,\n hour: hourGanZhi,\n minute: minuteGanZhi,\n };\n}\n\n/**\n * 根据子时干支和具体时间计算分钟干支(刻干支)\n * 每10分钟对应一个干支,对应Python版本的ke_jiazi_d函数\n */\nfunction getMinuteGanZhi(ziGanZhi: string, hour: number, minute: number): string {\n const keList = findLunarKe(ziGanZhi);\n\n // 将分钟取整到10分钟(00, 10, 20, 30, 40, 50)\n const roundedMinute = Math.floor(minute / 10) * 10;\n\n // 计算索引:每小时6个刻,每天144个刻,循环60个干支\n const keIndex = (hour * 6 + Math.floor(roundedMinute / 10)) % 60;\n\n return keList[keIndex];\n}\n\n/**\n * 获取时辰对应的地支\n */\nexport function getHourZhi(hour: number): string {\n const zhiMap = [\n '子',\n '丑',\n '丑',\n '寅',\n '寅',\n '卯',\n '卯',\n '辰',\n '辰',\n '巳',\n '巳',\n '午',\n '午',\n '未',\n '未',\n '申',\n '申',\n '酉',\n '酉',\n '戌',\n '戌',\n '亥',\n '亥',\n '子',\n ];\n return zhiMap[hour] || '子';\n}\n\n/**\n * 生成干支表(用于调试)\n */\nexport function generateGanZhiTable(startYear: number, endYear: number): void {\n for (let year = startYear; year <= endYear; year++) {\n const result = ganZhi(year, 1, 1, 0, 0);\n console.log(`${year}年: ${result.year} ${result.month} ${result.day} ${result.hour}`);\n }\n}\n","/**\n * 五兆占卜系统 - 节气计算模块\n * 使用tyme4ts计算二十四节气\n */\n\nimport { SolarTime } from 'tyme4ts';\n\n/**\n * 根据日期查找当前节气\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 当前节气名称\n */\nexport function findCurrentJieQi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): string {\n const solarTime = SolarTime.fromYmdHms(year, month, day, hour, minute, 0);\n const term = solarTime.getTerm();\n return term.getName();\n}\n\n/**\n * 根据节气查找季节\n */\nexport function findSeason(jieqi: string): string {\n const seasons: Record<string, string> = {\n 立春: '春',\n 雨水: '春',\n 驚蟄: '春',\n 春分: '春',\n 清明: '春',\n 穀雨: '春',\n 立夏: '夏',\n 小滿: '夏',\n 芒種: '夏',\n 夏至: '夏',\n 小暑: '夏',\n 大暑: '夏',\n 立秋: '秋',\n 處暑: '秋',\n 白露: '秋',\n 秋分: '秋',\n 寒露: '秋',\n 霜降: '秋',\n 立冬: '冬',\n 小雪: '冬',\n 大雪: '冬',\n 冬至: '冬',\n 小寒: '冬',\n 大寒: '冬',\n };\n\n return seasons[jieqi] || '';\n}\n","/**\n * 五兆占卜系统 - 核心排盘模块\n */\n\nimport {\n NUM_TO_ELEMENT,\n SIX_BEASTS,\n DAY_GAN_TO_BEAST,\n SIX_BEAST_WEAKNESS,\n YIN_YANG,\n GU_XU_CONFIG,\n ZHI_TO_GUA,\n GENERAL_MAP,\n WU_XING_RELATION,\n LIU_QIN_MAP,\n GONG_WEI,\n GONG_WEI_LABELS,\n BA_GUA,\n WANG_XIANG,\n JIEQI_GROUPS,\n} from './constants.js';\nimport { randomSplit, BiDict, getWuXing, JIAZI, rotateArray } from './utils.js';\nimport { GanZhiResult } from './ganzhi.js';\n\n/**\n * 宫位信息\n */\nexport interface GongWeiInfo {\n 宮位: string; // 宫位名称\n 宮位1: string; // 宫位八卦\n 旺相: string; // 旺相状态\n 數字: number; // 数字(1-5)\n 五行: string; // 五行\n 六獸: string; // 六兽\n 六獸死: string; // 六兽死\n 六獸害: string; // 六兽害\n 六親: string; // 六亲\n 孤: string; // 孤\n 虛: string; // 虚\n 關: string; // 关\n 籥: string; // 钥\n 將軍: string; // 将军\n}\n\n/**\n * 五兆排盘结果\n */\nexport interface WuZhaoPaiPanResult {\n 兆?: GongWeiInfo;\n 木鄉?: GongWeiInfo;\n 火鄉?: GongWeiInfo;\n 土鄉?: GongWeiInfo;\n 金鄉?: GongWeiInfo;\n 水鄉?: GongWeiInfo;\n 錯誤?: string;\n}\n\n/**\n * 节气旺相配置\n */\nfunction buildJieQiWangXiang(): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n JIEQI_GROUPS.forEach((group, index) => {\n const rotated = rotateArray(BA_GUA as unknown as string[], index);\n const mapping: Record<string, string> = {};\n rotated.forEach((gua, i) => {\n mapping[gua] = WANG_XIANG[i];\n });\n\n group.forEach((jieqi) => {\n result[jieqi] = mapping;\n });\n });\n\n return result;\n}\n\nconst JIEQI_WANG_XIANG = buildJieQiWangXiang();\n\n/**\n * 四季关籥配置\n */\nconst SOLAR_TERMS_BY_SEASON: Array<{ terms: string[]; guan: string; yue: string }> = [\n { terms: ['立春', '雨水', '驚蟄', '春分', '清明', '穀雨'], guan: '丑', yue: '巳' },\n { terms: ['立夏', '小滿', '芒種', '夏至', '小暑', '大暑'], guan: '辰', yue: '申' },\n { terms: ['立秋', '處暑', '白露', '秋分', '寒露', '霜降'], guan: '未', yue: '亥' },\n { terms: ['立冬', '小雪', '大雪', '冬至', '小寒', '大寒'], guan: '戌', yue: '寅' },\n];\n\n/**\n * 根据节气获取关籥\n */\nfunction getGuanYue(jieqi: string): { 關: string; 籥: string } | null {\n for (const season of SOLAR_TERMS_BY_SEASON) {\n if (season.terms.includes(jieqi)) {\n return { 關: season.guan, 籥: season.yue };\n }\n }\n return null;\n}\n\n/**\n * 五兆随机分配排盘\n * @param num 起卦数字\n * @param jq 节气\n * @param cm 农历月\n * @param gz1 干支1(用于配六兽)\n * @param gz2 干支2(时辰干支,用于孤虚)\n * @param liurenData 六壬数据(地转天盘)\n * @returns 五兆排盘结果\n */\nexport function fiveZhaoPaiPan(\n num: number,\n jq: string,\n cm: string,\n gz1: string,\n gz2: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const dayGan = gz1[0];\n\n // 验证日干\n if (!(dayGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n const base = 36;\n const result: WuZhaoPaiPanResult = {};\n\n // 确定六兽序列\n const beastStart = DAY_GAN_TO_BEAST[dayGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘(如果提供了六壬数据)\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[gz2[1]] || gz2[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const gz2Index = Math.floor(JIAZI.indexOf(gz2) / 10);\n const guxuConfig = GU_XU_CONFIG[gz2Index];\n const yinYang = YIN_YANG[gz2[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置\n const positions: Array<[string, string]> = [\n ['巽宮', '兆'],\n ['震宮', '木鄉'],\n ['離宮', '火鄉'],\n ['中宮', '土鄉'],\n ['兌宮', '金鄉'],\n ['坎宮', '水鄉'],\n ];\n\n let remain = base;\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label] = positions[idx];\n const left = randomSplit(remain);\n let zhaoNum = left % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n\n remain -= zhaoNum;\n if (remain <= 0) break;\n }\n\n return result;\n}\n\n/**\n * 干支起盘(根据年月日时分干支计算)\n * @param gzList 干支列表 [年, 月, 日, 时, 分]\n * @param num 额外数字\n * @param jq 节气\n * @param cm 农历月\n * @param liurenData 六壬数据\n * @returns 五兆排盘结果\n */\nexport function ganzhiPaiPan(\n gzList: GanZhiResult,\n num: number,\n jq: string,\n cm: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const { year, month, day, hour, minute } = gzList;\n\n // 验证分钟干支的天干(Python版本使用mi[0])\n const minuteGan = minute[0];\n if (!(minuteGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n // 甲子序号映射\n const jz2num: Record<string, number> = {};\n JIAZI.forEach((gz, index) => {\n jz2num[gz] = index + 1;\n });\n\n // 确定六兽序列(使用分钟干支的天干)\n const beastStart = DAY_GAN_TO_BEAST[minuteGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[minute[1]] || minute[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const minuteIndex = Math.floor(JIAZI.indexOf(minute) / 10);\n const guxuConfig = GU_XU_CONFIG[minuteIndex];\n const yinYang = YIN_YANG[minute[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置(每个宫位使用不同的干支组合)\n const positions: Array<[string, string, string[]]> = [\n ['巽宮', '兆', [year, month, day, hour, minute]],\n ['震宮', '木鄉', [month, day, hour, minute]],\n ['離宮', '火鄉', [day, hour, minute]],\n ['中宮', '土鄉', [hour, minute]],\n ['兌宮', '金鄉', [minute]],\n ['坎宮', '水鄉', []],\n ];\n\n const result: WuZhaoPaiPanResult = {};\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label, parts] = positions[idx];\n\n // 计算总数\n let total = num;\n for (const part of parts) {\n total += jz2num[part] || (typeof part === 'number' ? part : 0);\n }\n\n let zhaoNum = total % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts","../src/utils.ts","../src/ganzhi.ts","../src/jieqi.ts","../src/kinwuzhao.ts"],"names":["SolarTime","key"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 五兆占卜系统 - 常量定义\n * 包含天干地支、五行、八卦等基础常量\n */\n\n// 天干地支\nexport const TIAN_GAN = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] as const;\nexport const DI_ZHI = [\n '子',\n '丑',\n '寅',\n '卯',\n '辰',\n '巳',\n '午',\n '未',\n '申',\n '酉',\n '戌',\n '亥',\n] as const;\n\n// 数字对应五行\nexport const NUM_TO_ELEMENT: Record<number, string> = {\n 1: '水',\n 2: '火',\n 3: '木',\n 4: '金',\n 5: '土',\n};\n\n// 五行\nexport const WU_XING = ['木', '火', '土', '金', '水'] as const;\n\n// 八卦\nexport const BA_GUA = ['艮', '震', '巽', '離', '坤', '兌', '乾', '坎'] as const;\n\n// 旺相胎沒死囚廢休\nexport const WANG_XIANG = ['王', '相', '胎', '沒', '死', '囚', '廢', '休'] as const;\n\n// 六兽序列\nexport const SIX_BEASTS = ['青龍', '朱雀', '螣蛇', '勾陳', '白虎', '玄武'] as const;\n\n// 六兽弱点\nexport const SIX_BEAST_WEAKNESS: Record<string, [string, string]> = {\n 青龍: ['坤', '兌'],\n 朱雀: ['坎', '巽'],\n 螣蛇: ['坎', '巽'],\n 勾陳: ['巽', '巽'],\n 白虎: ['坎', '離'],\n 玄武: ['巽', '震'],\n};\n\n// 日干对应起六兽首位\nexport const DAY_GAN_TO_BEAST: Record<string, string> = {\n 甲: '青龍',\n 乙: '青龍',\n 丙: '朱雀',\n 丁: '朱雀',\n 戊: '勾陳',\n 己: '勾陳',\n 庚: '白虎',\n 辛: '白虎',\n 壬: '玄武',\n 癸: '玄武',\n};\n\n// 二十四节气\nexport const TWENTY_FOUR_SOLAR_TERMS = [\n '立春',\n '雨水',\n '驚蟄',\n '春分',\n '清明',\n '穀雨',\n '立夏',\n '小滿',\n '芒種',\n '夏至',\n '小暑',\n '大暑',\n '立秋',\n '處暑',\n '白露',\n '秋分',\n '寒露',\n '霜降',\n '立冬',\n '小雪',\n '大雪',\n '冬至',\n '小寒',\n '大寒',\n] as const;\n\n// 节气分组\nexport const JIEQI_GROUPS = [\n ['立春', '雨水', '驚蟄'],\n ['春分', '清明', '穀雨'],\n ['立夏', '小滿', '芒種'],\n ['夏至', '小暑', '大暑'],\n ['立秋', '處暑', '白露'],\n ['秋分', '寒露', '霜降'],\n ['立冬', '小雪', '大雪'],\n ['冬至', '小寒', '大寒'],\n] as const;\n\n// 地支转卦\nexport const ZHI_TO_GUA: Record<string, string> = {\n 子: '坎',\n 寅: '震',\n 卯: '震',\n 辰: '巽',\n 巳: '巽',\n 午: '離',\n 申: '兌',\n 酉: '兌',\n 戌: '乾',\n 亥: '乾',\n 丑: '中',\n 未: '中',\n};\n\n// 将军\nexport const GENERAL_MAP: Record<string, string> = {\n 子: '子',\n 丑: '酉',\n 寅: '午',\n 卯: '卯',\n 辰: '子',\n 巳: '酉',\n 午: '午',\n 未: '卯',\n 申: '子',\n 酉: '酉',\n 戌: '午',\n 亥: '卯',\n};\n\n// 阴阳\nexport const YIN_YANG: Record<string, '陽' | '陰'> = {\n 甲: '陽',\n 丙: '陽',\n 戊: '陽',\n 庚: '陽',\n 壬: '陽',\n 乙: '陰',\n 丁: '陰',\n 己: '陰',\n 辛: '陰',\n 癸: '陰',\n};\n\n// 孤虚配置\nexport const GU_XU_CONFIG = [\n { 陽: { 孤: '戌', 虛: '辰' }, 陰: { 孤: '亥', 虛: '巳' } },\n { 陽: { 孤: '申', 虛: '寅' }, 陰: { 孤: '酉', 虛: '卯' } },\n { 陽: { 孤: '午', 虛: '子' }, 陰: { 孤: '未', 虛: '丑' } },\n { 陽: { 孤: '辰', 虛: '戌' }, 陰: { 孤: '巳', 虛: '亥' } },\n { 陽: { 孤: '寅', 虛: '申' }, 陰: { 孤: '卯', 虛: '酉' } },\n { 陽: { 孤: '子', 虛: '午' }, 陰: { 孤: '丑', 虛: '未' } },\n];\n\n// 五行生克关系\nexport const WU_XING_RELATION: Record<string, string> = {\n 木木: '比和',\n 木火: '我生',\n 木土: '我尅',\n 木金: '尅我',\n 木水: '生我',\n 火木: '生我',\n 火火: '比和',\n 火土: '我生',\n 火金: '我尅',\n 火水: '尅我',\n 土木: '尅我',\n 土火: '生我',\n 土土: '比和',\n 土金: '我生',\n 土水: '我尅',\n 金木: '我尅',\n 金火: '尅我',\n 金土: '生我',\n 金金: '比和',\n 金水: '我生',\n 水木: '我生',\n 水火: '我尅',\n 水土: '尅我',\n 水金: '生我',\n 水水: '比和',\n};\n\n// 六亲\nexport const LIU_QIN_MAP: Record<string, string> = {\n 尅我: '官鬼',\n 我尅: '妻財',\n 比和: '兄弟',\n 生我: '父母',\n 我生: '子孫',\n};\n\n// 宫位\nexport const GONG_WEI = ['巽宮', '震宮', '離宮', '中宮', '兌宮', '坎宮'] as const;\n\n// 宫位标签\nexport const GONG_WEI_LABELS = ['兆', '木鄉', '火鄉', '土鄉', '金鄉', '水鄉'] as const;\n","/**\n * 五兆占卜系统 - 工具函数\n */\n\nimport { TIAN_GAN, DI_ZHI } from './constants.js';\n\n/**\n * 生成六十甲子\n */\nexport function generateJiaZi(): string[] {\n const result: string[] = [];\n for (let i = 0; i < 60; i++) {\n result.push(TIAN_GAN[i % 10] + DI_ZHI[i % 12]);\n }\n return result;\n}\n\n/**\n * 获取六十甲子\n */\nexport const JIAZI = generateJiaZi();\n\n/**\n * 旋转数组\n */\nexport function rotateArray<T>(arr: T[], shift: number): T[] {\n const normalizedShift = shift % arr.length;\n return [...arr.slice(normalizedShift), ...arr.slice(0, normalizedShift)];\n}\n\n/**\n * 创建新列表(从指定元素开始)\n */\nexport function newList<T>(list: T[], element: T): T[] {\n const index = list.indexOf(element);\n if (index === -1) return list;\n return rotateArray(list, index);\n}\n\n/**\n * 多键字典查找\n */\nexport function multiKeyDictGet<K, V>(\n dict: Map<K[], V> | Record<string, V>,\n key: K\n): V | undefined {\n if (dict instanceof Map) {\n for (const [keys, value] of dict.entries()) {\n if (keys.includes(key)) {\n return value;\n }\n }\n } else {\n for (const [keysStr, value] of Object.entries(dict)) {\n const keys = keysStr.split(',');\n if (keys.includes(String(key))) {\n return value;\n }\n }\n }\n return undefined;\n}\n\n/**\n * 随机分割(返回左边部分)\n */\nexport function randomSplit(total: number): number {\n if (total <= 1) return 1;\n return Math.floor(Math.random() * (total - 1)) + 1;\n}\n\n/**\n * 获取六甲旬\n */\nexport function getLiuJiaXun(): Map<string[], string> {\n const xunMap = new Map<string[], string>();\n for (let i = 0; i < 6; i++) {\n const startGanZhi = JIAZI[i * 10];\n const xun = JIAZI.slice(i * 10, i * 10 + 10);\n xunMap.set(xun, startGanZhi);\n }\n return xunMap;\n}\n\n/**\n * 五鼠遁 - 根据日干支推算时辰干支\n */\nexport function findLunarHour(dayGanZhi: string): Record<string, string> {\n const fiveRats: Record<string, string> = {\n 甲: '甲子',\n 己: '甲子',\n 乙: '丙子',\n 庚: '丙子',\n 丙: '戊子',\n 辛: '戊子',\n 丁: '庚子',\n 壬: '庚子',\n 戊: '壬子',\n 癸: '壬子',\n };\n\n const dayGan = dayGanZhi[0];\n const startGanZhi = fiveRats[dayGan];\n if (!startGanZhi) return {};\n\n const hourList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<string, string> = {};\n DI_ZHI.forEach((zhi, index) => {\n result[zhi] = hourList[index];\n });\n\n return result;\n}\n\n/**\n * 五虎遁 - 根据年干支推算月份干支\n */\nexport function findLunarMonth(yearGanZhi: string): Record<number, string> {\n const fiveTigers: Record<string, string> = {\n 甲: '丙寅',\n 己: '丙寅',\n 乙: '戊寅',\n 庚: '戊寅',\n 丙: '庚寅',\n 辛: '庚寅',\n 丁: '壬寅',\n 壬: '壬寅',\n 戊: '甲寅',\n 癸: '甲寅',\n };\n\n const yearGan = yearGanZhi[0];\n const startGanZhi = fiveTigers[yearGan];\n if (!startGanZhi) return {};\n\n const monthList = newList(JIAZI, startGanZhi).slice(0, 12);\n const result: Record<number, string> = {};\n for (let i = 0; i < 12; i++) {\n result[i + 1] = monthList[i];\n }\n\n return result;\n}\n\n/**\n * 五狗遁 - 根据子时干支推算分干支(每分钟一个干支)\n * 对应Python版本的find_lunar_minute函数\n */\nexport function findLunarMinute(hourGanZhi: string): string[] {\n const fiveDogs: Record<string, string> = {\n 甲: '甲戌',\n 己: '甲戌',\n 乙: '丙戌',\n 庚: '丙戌',\n 丙: '戊戌',\n 辛: '戊戌',\n 丁: '庚戌',\n 壬: '庚戌',\n 戊: '壬戌',\n 癸: '壬戌',\n };\n\n const hourGan = hourGanZhi[0];\n const startGanZhi = fiveDogs[hourGan];\n if (!startGanZhi) return JIAZI;\n\n return newList(JIAZI, startGanZhi);\n}\n\n/**\n * 获取干支对应的五行\n */\nexport function getWuXing(ganOrZhi: string): string {\n const wuXingMap: Record<string, string> = {\n 甲: '木',\n 乙: '木',\n 寅: '木',\n 卯: '木',\n 震: '木',\n 巽: '木',\n 丙: '火',\n 丁: '火',\n 巳: '火',\n 午: '火',\n 離: '火',\n 壬: '水',\n 癸: '水',\n 亥: '水',\n 子: '水',\n 坎: '水',\n 庚: '金',\n 辛: '金',\n 申: '金',\n 酉: '金',\n 乾: '金',\n 兌: '金',\n 未: '土',\n 丑: '土',\n 戊: '土',\n 己: '土',\n 辰: '土',\n 戌: '土',\n 艮: '土',\n 坤: '土',\n };\n\n return wuXingMap[ganOrZhi] || '';\n}\n\n/**\n * 双向映射类\n */\nexport class BiDict<K, V> {\n private forward = new Map<K, V>();\n private backward = new Map<V, K>();\n\n set(key: K, value: V): void {\n this.forward.set(key, value);\n this.backward.set(value, key);\n }\n\n get(key: K): V | undefined {\n return this.forward.get(key);\n }\n\n getInverse(value: V): K | undefined {\n return this.backward.get(value);\n }\n\n get inverse() {\n return {\n get: (value: V) => this.getInverse(value),\n };\n }\n}\n","/**\n * 五兆占卜系统 - 干支计算模块\n * 使用tyme4ts计算天干地支\n */\n\nimport { SolarTime } from 'tyme4ts';\nimport { findLunarMinute, JIAZI, newList } from './utils.js';\n\n/**\n * 干支结果\n */\nexport interface GanZhiResult {\n year: string; // 年干支\n month: string; // 月干支\n day: string; // 日干支\n hour: string; // 时干支\n minute: string; // 分干支\n}\n\n/**\n * 将公历日期转换为干支\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 干支结果\n */\nexport function ganZhi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): GanZhiResult {\n // 处理23点的特殊情况(算作第二天的子时)\n let adjustedYear = year;\n let adjustedMonth = month;\n let adjustedDay = day;\n let adjustedHour = hour;\n\n if (hour === 23) {\n const nextDay = new Date(year, month - 1, day + 1);\n adjustedYear = nextDay.getFullYear();\n adjustedMonth = nextDay.getMonth() + 1;\n adjustedDay = nextDay.getDate();\n adjustedHour = 0;\n }\n\n // 使用tyme4ts获取八字\n const solarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, adjustedHour, minute, 0);\n const lunarHour = solarTime.getLunarHour();\n const eightChar = lunarHour.getEightChar();\n\n const yearGanZhi = eightChar.getYear().getName();\n const monthGanZhi = eightChar.getMonth().getName();\n const dayGanZhi = eightChar.getDay().getName();\n const hourGanZhi = eightChar.getHour().getName();\n\n // 计算刻干支(使用五马遁,每10分钟一个干支)\n // 获取当天子时的干支\n const ziSolarTime = SolarTime.fromYmdHms(adjustedYear, adjustedMonth, adjustedDay, 0, 0, 0);\n const ziLunarHour = ziSolarTime.getLunarHour();\n const ziEightChar = ziLunarHour.getEightChar();\n const ziGanZhi = ziEightChar.getHour().getName();\n const minuteGanZhi = getMinuteGanZhi(ziGanZhi, adjustedHour, minute);\n\n return {\n year: yearGanZhi,\n month: monthGanZhi,\n day: dayGanZhi,\n hour: hourGanZhi,\n minute: minuteGanZhi,\n };\n}\n\n/**\n * 根据子时干支和具体时间计算分钟干支\n * 每分钟对应一个干支,60分钟恰好一个完整循环\n * 对应Python版本的minutes_jiazi_d函数\n */\nfunction getMinuteGanZhi(ziGanZhi: string, hour: number, minute: number): string {\n const minuteList = findLunarMinute(ziGanZhi);\n\n // 每分钟一个干支,只取决于分钟值(0-59),与小时无关\n // 60分钟 = 60干支,恰好一个完整循环\n return minuteList[minute];\n}\n\n/**\n * 获取时辰对应的地支\n */\nexport function getHourZhi(hour: number): string {\n const zhiMap = [\n '子',\n '丑',\n '丑',\n '寅',\n '寅',\n '卯',\n '卯',\n '辰',\n '辰',\n '巳',\n '巳',\n '午',\n '午',\n '未',\n '未',\n '申',\n '申',\n '酉',\n '酉',\n '戌',\n '戌',\n '亥',\n '亥',\n '子',\n ];\n return zhiMap[hour] || '子';\n}\n\n/**\n * 生成干支表(用于调试)\n */\nexport function generateGanZhiTable(startYear: number, endYear: number): void {\n for (let year = startYear; year <= endYear; year++) {\n const result = ganZhi(year, 1, 1, 0, 0);\n console.log(`${year}年: ${result.year} ${result.month} ${result.day} ${result.hour}`);\n }\n}\n","/**\n * 五兆占卜系统 - 节气计算模块\n * 使用tyme4ts计算二十四节气\n */\n\nimport { SolarTime } from 'tyme4ts';\n\n/**\n * 根据日期查找当前节气\n * @param year 年\n * @param month 月 (1-12)\n * @param day 日\n * @param hour 时 (0-23)\n * @param minute 分 (0-59)\n * @returns 当前节气名称\n */\nexport function findCurrentJieQi(\n year: number,\n month: number,\n day: number,\n hour: number,\n minute: number\n): string {\n const solarTime = SolarTime.fromYmdHms(year, month, day, hour, minute, 0);\n const term = solarTime.getTerm();\n return term.getName();\n}\n\n/**\n * 根据节气查找季节\n */\nexport function findSeason(jieqi: string): string {\n const seasons: Record<string, string> = {\n 立春: '春',\n 雨水: '春',\n 驚蟄: '春',\n 春分: '春',\n 清明: '春',\n 穀雨: '春',\n 立夏: '夏',\n 小滿: '夏',\n 芒種: '夏',\n 夏至: '夏',\n 小暑: '夏',\n 大暑: '夏',\n 立秋: '秋',\n 處暑: '秋',\n 白露: '秋',\n 秋分: '秋',\n 寒露: '秋',\n 霜降: '秋',\n 立冬: '冬',\n 小雪: '冬',\n 大雪: '冬',\n 冬至: '冬',\n 小寒: '冬',\n 大寒: '冬',\n };\n\n return seasons[jieqi] || '';\n}\n","/**\n * 五兆占卜系统 - 核心排盘模块\n */\n\nimport {\n NUM_TO_ELEMENT,\n SIX_BEASTS,\n DAY_GAN_TO_BEAST,\n SIX_BEAST_WEAKNESS,\n YIN_YANG,\n GU_XU_CONFIG,\n ZHI_TO_GUA,\n GENERAL_MAP,\n WU_XING_RELATION,\n LIU_QIN_MAP,\n GONG_WEI,\n GONG_WEI_LABELS,\n BA_GUA,\n WANG_XIANG,\n JIEQI_GROUPS,\n} from './constants.js';\nimport { randomSplit, BiDict, getWuXing, JIAZI, rotateArray } from './utils.js';\nimport { GanZhiResult } from './ganzhi.js';\n\n/**\n * 宫位信息\n */\nexport interface GongWeiInfo {\n 宮位: string; // 宫位名称\n 宮位1: string; // 宫位八卦\n 旺相: string; // 旺相状态\n 數字: number; // 数字(1-5)\n 五行: string; // 五行\n 六獸: string; // 六兽\n 六獸死: string; // 六兽死\n 六獸害: string; // 六兽害\n 六親: string; // 六亲\n 孤: string; // 孤\n 虛: string; // 虚\n 關: string; // 关\n 籥: string; // 钥\n 將軍: string; // 将军\n}\n\n/**\n * 五兆排盘结果\n */\nexport interface WuZhaoPaiPanResult {\n 兆?: GongWeiInfo;\n 木鄉?: GongWeiInfo;\n 火鄉?: GongWeiInfo;\n 土鄉?: GongWeiInfo;\n 金鄉?: GongWeiInfo;\n 水鄉?: GongWeiInfo;\n 錯誤?: string;\n}\n\n/**\n * 节气旺相配置\n */\nfunction buildJieQiWangXiang(): Record<string, Record<string, string>> {\n const result: Record<string, Record<string, string>> = {};\n\n JIEQI_GROUPS.forEach((group, index) => {\n const rotated = rotateArray(BA_GUA as unknown as string[], index);\n const mapping: Record<string, string> = {};\n rotated.forEach((gua, i) => {\n mapping[gua] = WANG_XIANG[i];\n });\n\n group.forEach((jieqi) => {\n result[jieqi] = mapping;\n });\n });\n\n return result;\n}\n\nconst JIEQI_WANG_XIANG = buildJieQiWangXiang();\n\n/**\n * 四季关籥配置\n */\nconst SOLAR_TERMS_BY_SEASON: Array<{ terms: string[]; guan: string; yue: string }> = [\n { terms: ['立春', '雨水', '驚蟄', '春分', '清明', '穀雨'], guan: '丑', yue: '巳' },\n { terms: ['立夏', '小滿', '芒種', '夏至', '小暑', '大暑'], guan: '辰', yue: '申' },\n { terms: ['立秋', '處暑', '白露', '秋分', '寒露', '霜降'], guan: '未', yue: '亥' },\n { terms: ['立冬', '小雪', '大雪', '冬至', '小寒', '大寒'], guan: '戌', yue: '寅' },\n];\n\n/**\n * 根据节气获取关籥\n */\nfunction getGuanYue(jieqi: string): { 關: string; 籥: string } | null {\n for (const season of SOLAR_TERMS_BY_SEASON) {\n if (season.terms.includes(jieqi)) {\n return { 關: season.guan, 籥: season.yue };\n }\n }\n return null;\n}\n\n/**\n * 五兆随机分配排盘\n * @param num 起卦数字\n * @param jq 节气\n * @param cm 农历月\n * @param gz1 干支1(用于配六兽)\n * @param gz2 干支2(时辰干支,用于孤虚)\n * @param liurenData 六壬数据(地转天盘)\n * @returns 五兆排盘结果\n */\nexport function fiveZhaoPaiPan(\n num: number,\n jq: string,\n cm: string,\n gz1: string,\n gz2: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const dayGan = gz1[0];\n\n // 验证日干\n if (!(dayGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n const base = 36;\n const result: WuZhaoPaiPanResult = {};\n\n // 确定六兽序列\n const beastStart = DAY_GAN_TO_BEAST[dayGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘(如果提供了六壬数据)\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[gz2[1]] || gz2[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const gz2Index = Math.floor(JIAZI.indexOf(gz2) / 10);\n const guxuConfig = GU_XU_CONFIG[gz2Index];\n const yinYang = YIN_YANG[gz2[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置\n const positions: Array<[string, string]> = [\n ['巽宮', '兆'],\n ['震宮', '木鄉'],\n ['離宮', '火鄉'],\n ['中宮', '土鄉'],\n ['兌宮', '金鄉'],\n ['坎宮', '水鄉'],\n ];\n\n let remain = base;\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label] = positions[idx];\n const left = randomSplit(remain);\n let zhaoNum = left % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n\n remain -= zhaoNum;\n if (remain <= 0) break;\n }\n\n return result;\n}\n\n/**\n * 干支起盘(根据年月日时分干支计算)\n * @param gzList 干支列表 [年, 月, 日, 时, 分]\n * @param num 额外数字\n * @param jq 节气\n * @param cm 农历月\n * @param liurenData 六壬数据\n * @returns 五兆排盘结果\n */\nexport function ganzhiPaiPan(\n gzList: GanZhiResult,\n num: number,\n jq: string,\n cm: string,\n liurenData?: Record<string, string>\n): WuZhaoPaiPanResult {\n const { year, month, day, hour, minute } = gzList;\n\n // 验证分钟干支的天干(Python版本使用mi[0])\n const minuteGan = minute[0];\n if (!(minuteGan in DAY_GAN_TO_BEAST)) {\n return { 錯誤: '日干不正確,請輸入:甲乙丙丁戊己庚辛壬癸' };\n }\n\n // 甲子序号映射\n const jz2num: Record<string, number> = {};\n JIAZI.forEach((gz, index) => {\n jz2num[gz] = index + 1;\n });\n\n // 确定六兽序列(使用分钟干支的天干)\n const beastStart = DAY_GAN_TO_BEAST[minuteGan];\n const startIndex = SIX_BEASTS.indexOf(beastStart as any);\n const beastSeq = Array.from({ length: 6 }, (_, i) => SIX_BEASTS[(startIndex + i) % 6]);\n\n // 准备地转天盘\n const sky2earth = new BiDict<string, string>();\n if (liurenData) {\n Object.entries(liurenData).forEach(([key, value]) => {\n sky2earth.set(key, value);\n });\n }\n\n // 获取关籥\n const guanYue = getGuanYue(jq);\n let lock = '';\n let key = '';\n let general = '';\n\n if (guanYue && liurenData) {\n const guanZhi = sky2earth.getInverse(guanYue.關) || guanYue.關;\n const yueZhi = sky2earth.getInverse(guanYue.籥) || guanYue.籥;\n lock = ZHI_TO_GUA[guanZhi] || '';\n key = ZHI_TO_GUA[yueZhi] || '';\n\n const generalZhi = GENERAL_MAP[minute[1]] || minute[1];\n const generalMapped = sky2earth.getInverse(generalZhi) || generalZhi;\n general = ZHI_TO_GUA[generalMapped] || '';\n }\n\n // 获取孤虚\n const minuteIndex = Math.floor(JIAZI.indexOf(minute) / 10);\n const guxuConfig = GU_XU_CONFIG[minuteIndex];\n const yinYang = YIN_YANG[minute[0]];\n const gu = guxuConfig[yinYang].孤;\n const xu = guxuConfig[yinYang].虛;\n const guGua = ZHI_TO_GUA[gu] || '';\n const xuGua = ZHI_TO_GUA[xu] || '';\n\n // 宫位配置(每个宫位使用不同的干支组合)\n const positions: Array<[string, string, string[]]> = [\n ['巽宮', '兆', [year, month, day, hour, minute]],\n ['震宮', '木鄉', [month, day, hour, minute]],\n ['離宮', '火鄉', [day, hour, minute]],\n ['中宮', '土鄉', [hour, minute]],\n ['兌宮', '金鄉', [minute]],\n ['坎宮', '水鄉', []],\n ];\n\n const result: WuZhaoPaiPanResult = {};\n let myElement = '';\n\n for (let idx = 0; idx < positions.length; idx++) {\n const [gong, label, parts] = positions[idx];\n\n // 计算总数\n let total = num;\n for (const part of parts) {\n total += jz2num[part] || (typeof part === 'number' ? part : 0);\n }\n\n let zhaoNum = total % 5;\n zhaoNum = zhaoNum === 0 ? 5 : zhaoNum;\n const zhaoElement = NUM_TO_ELEMENT[zhaoNum];\n const beast = beastSeq[idx];\n\n const gongGua = gong[0] === '中' ? '坤' : gong[0];\n\n // 计算六亲\n let relation = '';\n if (idx === 0) {\n myElement = zhaoElement;\n } else {\n const relationKey = myElement + zhaoElement;\n const wuxingRelation = WU_XING_RELATION[relationKey] || '';\n relation = LIU_QIN_MAP[wuxingRelation] || '';\n }\n\n // 获取旺相\n const wangxiang = JIEQI_WANG_XIANG[jq]?.[gongGua] || '';\n\n // 六兽死害\n const weakness = SIX_BEAST_WEAKNESS[beast];\n const sixBeastDeath = weakness && weakness[0][0] === gongGua ? '死' : '';\n const sixBeastHarm = weakness && weakness[1][0] === gongGua ? '害' : '';\n\n (result as any)[label] = {\n 宮位: label,\n 宮位1: gongGua,\n 旺相: wangxiang,\n 數字: zhaoNum,\n 五行: zhaoElement,\n 六獸: beast,\n 六獸死: sixBeastDeath,\n 六獸害: sixBeastHarm,\n 六親: relation,\n 關: lock === gongGua ? '關' : '',\n 籥: key === gongGua ? '籥' : '',\n 孤: guGua === gongGua ? '孤' : '',\n 虛: xuGua === gongGua ? '虛' : '',\n 將軍: general === gongGua ? '將軍' : '',\n };\n }\n\n return result;\n}\n"]}
|
package/package.json
CHANGED
package/README.zh-CN.md
DELETED
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
# **Kinwuzhao (堅五兆) - TypeScript实现**
|
|
2
|
-
|
|
3
|
-
[](https://www.npmjs.com/package/kinwuzhao)
|
|
4
|
-
[](LICENSE)
|
|
5
|
-
|
|
6
|
-
五兆占卜排盘系统的TypeScript实现。
|
|
7
|
-
|
|
8
|
-
## 📖 简介
|
|
9
|
-
|
|
10
|
-
五兆是汉语词汇中记载的古代占卜方法,其核心定义源自《旧唐书·太宗纪上》。该方法在唐宋文献中多次出现,如宋代梅尧臣《江南杂感》诗及赵彦卫《云麓漫钞》均提及其实践方式,敦煌出土文献则保存了唐代五兆卜法的具体操作流程与卦象解析文本。
|
|
11
|
-
|
|
12
|
-
本项目将原Python实现转换为TypeScript库,提供现代化的API和完整的类型支持。
|
|
13
|
-
|
|
14
|
-
## ✨ 特性
|
|
15
|
-
|
|
16
|
-
- 🎯 **完整功能**:支持五兆随机分配和干支起盘两种模式
|
|
17
|
-
- 📅 **节气计算**:精确计算二十四节气
|
|
18
|
-
- 🌟 **干支转换**:准确的公历到干支转换
|
|
19
|
-
- 📦 **TypeScript**:完整的类型定义
|
|
20
|
-
- ✅ **测试覆盖**:完善的单元测试
|
|
21
|
-
- 🚀 **现代化**:使用ESM模块系统
|
|
22
|
-
|
|
23
|
-
## 📦 安装
|
|
24
|
-
|
|
25
|
-
使用pnpm(推荐):
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
pnpm add kinwuzhao
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
使用npm:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npm install kinwuzhao
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
使用yarn:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
yarn add kinwuzhao
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## 🚀 快速开始
|
|
44
|
-
|
|
45
|
-
### 基本用法
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
import { ganZhi, findCurrentJieQi, fiveZhaoPaiPan } from 'kinwuzhao';
|
|
49
|
-
|
|
50
|
-
// 1. 获取干支
|
|
51
|
-
const gz = ganZhi(2025, 6, 27, 11, 24);
|
|
52
|
-
console.log(gz);
|
|
53
|
-
// { year: '乙巳', month: '壬午', day: '甲子', hour: '庚午', minute: '己卯' }
|
|
54
|
-
|
|
55
|
-
// 2. 获取当前节气
|
|
56
|
-
const jq = findCurrentJieQi(2025, 6, 27, 11, 24);
|
|
57
|
-
console.log(jq); // '夏至'
|
|
58
|
-
|
|
59
|
-
// 3. 五兆排盘(随机分配模式)
|
|
60
|
-
const result = fiveZhaoPaiPan(0, jq, '五', gz.day, gz.hour);
|
|
61
|
-
console.log(result);
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### 干支起盘模式
|
|
65
|
-
|
|
66
|
-
```typescript
|
|
67
|
-
import { ganZhi, findCurrentJieQi, ganzhiPaiPan } from 'kinwuzhao';
|
|
68
|
-
|
|
69
|
-
// 获取干支
|
|
70
|
-
const gz = ganZhi(2025, 6, 27, 11, 24);
|
|
71
|
-
|
|
72
|
-
// 获取节气
|
|
73
|
-
const jq = findCurrentJieQi(2025, 6, 27, 11, 24);
|
|
74
|
-
|
|
75
|
-
// 干支起盘
|
|
76
|
-
const result = ganzhiPaiPan(gz, 0, jq, '五');
|
|
77
|
-
console.log(result);
|
|
78
|
-
|
|
79
|
-
// 输出包含六个宫位的信息
|
|
80
|
-
console.log(result.兆); // 巽宫(兆)
|
|
81
|
-
console.log(result.木鄉); // 震宫
|
|
82
|
-
console.log(result.火鄉); // 离宫
|
|
83
|
-
console.log(result.土鄉); // 中宫
|
|
84
|
-
console.log(result.金鄉); // 兑宫
|
|
85
|
-
console.log(result.水鄉); // 坎宫
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### 节气查询
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
import { findJieQiDate, findSeason, distanceToJieQi } from 'kinwuzhao';
|
|
92
|
-
|
|
93
|
-
// 查找2025年春分的日期
|
|
94
|
-
const chunfenDate = findJieQiDate(2025, '春分');
|
|
95
|
-
console.log(chunfenDate); // 2025年3月20日
|
|
96
|
-
|
|
97
|
-
// 查找节气对应的季节
|
|
98
|
-
const season = findSeason('春分');
|
|
99
|
-
console.log(season); // '春'
|
|
100
|
-
|
|
101
|
-
// 计算距离节气的天数
|
|
102
|
-
const distance = distanceToJieQi(2025, 6, 27, '夏至');
|
|
103
|
-
console.log(distance); // 距离夏至的天数
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
## 📚 API文档
|
|
107
|
-
|
|
108
|
-
### 干支计算
|
|
109
|
-
|
|
110
|
-
#### `ganZhi(year, month, day, hour, minute)`
|
|
111
|
-
|
|
112
|
-
将公历日期转换为干支。
|
|
113
|
-
|
|
114
|
-
**参数:**
|
|
115
|
-
- `year`: 年份
|
|
116
|
-
- `month`: 月份 (1-12)
|
|
117
|
-
- `day`: 日期
|
|
118
|
-
- `hour`: 小时 (0-23)
|
|
119
|
-
- `minute`: 分钟 (0-59)
|
|
120
|
-
|
|
121
|
-
**返回:** `GanZhiResult`
|
|
122
|
-
```typescript
|
|
123
|
-
{
|
|
124
|
-
year: string; // 年干支
|
|
125
|
-
month: string; // 月干支
|
|
126
|
-
day: string; // 日干支
|
|
127
|
-
hour: string; // 时干支
|
|
128
|
-
minute: string; // 分干支
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### 节气计算
|
|
133
|
-
|
|
134
|
-
#### `findCurrentJieQi(year, month, day, hour, minute)`
|
|
135
|
-
|
|
136
|
-
查找当前时间所处的节气。
|
|
137
|
-
|
|
138
|
-
**返回:** 节气名称(如"春分"、"夏至"等)
|
|
139
|
-
|
|
140
|
-
#### `findJieQiDate(year, jieqiName)`
|
|
141
|
-
|
|
142
|
-
查找指定年份某个节气的日期。
|
|
143
|
-
|
|
144
|
-
**返回:** `Date` 或 `null`
|
|
145
|
-
|
|
146
|
-
#### `findSeason(jieqi)`
|
|
147
|
-
|
|
148
|
-
根据节气查找对应的季节。
|
|
149
|
-
|
|
150
|
-
**返回:** "春"、"夏"、"秋"或"冬"
|
|
151
|
-
|
|
152
|
-
### 五兆排盘
|
|
153
|
-
|
|
154
|
-
#### `fiveZhaoPaiPan(num, jq, cm, gz1, gz2, liurenData?)`
|
|
155
|
-
|
|
156
|
-
五兆随机分配排盘。
|
|
157
|
-
|
|
158
|
-
**参数:**
|
|
159
|
-
- `num`: 起卦数字
|
|
160
|
-
- `jq`: 节气
|
|
161
|
-
- `cm`: 农历月
|
|
162
|
-
- `gz1`: 干支1(用于配六兽)
|
|
163
|
-
- `gz2`: 干支2(用于孤虚)
|
|
164
|
-
- `liurenData`: 可选的六壬数据
|
|
165
|
-
|
|
166
|
-
**返回:** `WuZhaoPaiPanResult`
|
|
167
|
-
|
|
168
|
-
#### `ganzhiPaiPan(gzList, num, jq, cm, liurenData?)`
|
|
169
|
-
|
|
170
|
-
干支起盘模式。
|
|
171
|
-
|
|
172
|
-
**参数:**
|
|
173
|
-
- `gzList`: 干支列表(由`ganZhi()`返回)
|
|
174
|
-
- `num`: 额外数字
|
|
175
|
-
- `jq`: 节气
|
|
176
|
-
- `cm`: 农历月
|
|
177
|
-
- `liurenData`: 可选的六壬数据
|
|
178
|
-
|
|
179
|
-
**返回:** `WuZhaoPaiPanResult`
|
|
180
|
-
|
|
181
|
-
### 排盘结果结构
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
interface WuZhaoPaiPanResult {
|
|
185
|
-
兆?: GongWeiInfo; // 巽宫
|
|
186
|
-
木鄉?: GongWeiInfo; // 震宫
|
|
187
|
-
火鄉?: GongWeiInfo; // 离宫
|
|
188
|
-
土鄉?: GongWeiInfo; // 中宫
|
|
189
|
-
金鄉?: GongWeiInfo; // 兑宫
|
|
190
|
-
水鄉?: GongWeiInfo; // 坎宫
|
|
191
|
-
錯誤?: string; // 错误信息
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
interface GongWeiInfo {
|
|
195
|
-
宮位: string; // 宫位名称
|
|
196
|
-
宮位1: string; // 宫位八卦
|
|
197
|
-
旺相: string; // 旺相状态
|
|
198
|
-
數字: number; // 数字(1-5)
|
|
199
|
-
五行: string; // 五行
|
|
200
|
-
六獸: string; // 六兽
|
|
201
|
-
六獸死: string; // 六兽死
|
|
202
|
-
六獸害: string; // 六兽害
|
|
203
|
-
六親: string; // 六亲
|
|
204
|
-
孤: string; // 孤
|
|
205
|
-
虛: string; // 虚
|
|
206
|
-
關: string; // 关
|
|
207
|
-
籥: string; // 钥
|
|
208
|
-
將軍: string; // 将军
|
|
209
|
-
}
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## 🧪 开发
|
|
213
|
-
|
|
214
|
-
### 安装依赖
|
|
215
|
-
|
|
216
|
-
```bash
|
|
217
|
-
pnpm install
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
### 运行测试
|
|
221
|
-
|
|
222
|
-
```bash
|
|
223
|
-
pnpm test
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### 查看测试覆盖率
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
pnpm test:coverage
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### 运行测试UI
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
pnpm test:ui
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### 构建
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
pnpm build
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
### 类型检查
|
|
245
|
-
|
|
246
|
-
```bash
|
|
247
|
-
pnpm type-check
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### 代码格式化
|
|
251
|
-
|
|
252
|
-
```bash
|
|
253
|
-
pnpm format
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### Linting
|
|
257
|
-
|
|
258
|
-
```bash
|
|
259
|
-
pnpm lint
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
## 📝 示例
|
|
263
|
-
|
|
264
|
-
查看 `examples` 目录获取更多示例:
|
|
265
|
-
|
|
266
|
-
- `examples/basic.ts` - 基本用法
|
|
267
|
-
- `examples/advanced.ts` - 高级用法
|
|
268
|
-
- `examples/complete-output.mjs` - 完整输出示例(可直接运行)
|
|
269
|
-
|
|
270
|
-
### 运行完整输出示例
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
node examples/complete-output.mjs
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
这将展示:
|
|
277
|
-
- ✅ 详细的干支计算过程
|
|
278
|
-
- ✅ 节气信息
|
|
279
|
-
- ✅ 完整的排盘结果(六个宫位)
|
|
280
|
-
- ✅ 格式化的盘面显示
|
|
281
|
-
- ✅ 断卦要点分析
|
|
282
|
-
- ✅ 随机排盘演示
|
|
283
|
-
- ✅ 多次排盘对比
|
|
284
|
-
- ✅ 四季节气对比
|
|
285
|
-
|
|
286
|
-
## 🤝 贡献
|
|
287
|
-
|
|
288
|
-
欢迎提交Issue和Pull Request!
|
|
289
|
-
|
|
290
|
-
## 📄 许可证
|
|
291
|
-
|
|
292
|
-
MIT License
|
|
293
|
-
|
|
294
|
-
## 🙏 致谢
|
|
295
|
-
|
|
296
|
-
本项目基于原Python实现转换而来,感谢原作者的贡献。
|
|
297
|
-
|
|
298
|
-
## 📚 参考文献
|
|
299
|
-
|
|
300
|
-
- 《旧唐书·太宗纪上》
|
|
301
|
-
- 宋代梅尧臣《江南杂感》
|
|
302
|
-
- 赵彦卫《云麓漫钞》
|
|
303
|
-
- 敦煌文献 P.2859《五兆要诀略》
|