紫微斗數排盤 (中州派) Javascript library
This is a Javascript library for Zi Wei Dou Shu creating destiny broad (紫微斗數排盤).
This library is based on 中州派 .
- Create destiny board with friendly input options. (排盤)
- Check board criteria. (檢查宮位是否存在/會見各星)
- Present board as JSON object.
- Print board as string.
npm i fortel-ziweidoushu
You can use DestinyConfigBuilder.withlunar
to specify the parameters.
And then use new DestinyBoard(config)
to build the board.
import { DestinyBoard, DestinyConfigBuilder, DayTimeGround, ConfigType, Gender } from 'fortel-ziweidoushu'
// 農曆1952年三月十五日寅時女士
const destinyBoard = new DestinyBoard(
DestinyConfigBuilder.withlunar({
year: 1952, // 年
month: 3, //月
day: 15, //日
isLeapMonth: false, // 非潤月
bornTimeGround: DayTimeGround.getByName('寅時'), // 出生時辰
configType: ConfigType.SKY, // 天盤, if missing this option, default is 天盤
gender: Gender.F, // 女士
}),
)
console.log(destinyBoard.toString())
output
DestinyBoard {
config: {"year":1952,"month":3,"day":15,"isLeapMonth":false,"yearSky":"壬","yearGround":"辰","monthSky":"甲","monthGround":"辰","daySky":"乙","dayGround":"酉","bornTimeGround":"寅時","configType":"天盤","gender":"女
"},
element: 金四局,
destinyMaster: 廉貞,
bodyMaster: 文昌,
startControl: 子,
cells: [
Cell {壬子, temples=[夫妻], majorStars=[武曲 1,天府 2], minorStars=[鈴星,擎羊], miniStars=[], miscStars=[官府,白虎,將星], ageRange=[24-33], lifeStage=[衰]},
Cell {癸丑, temples=[兄弟], majorStars=[太陽 -1,太陰 2], minorStars=[地劫], miniStars=[寡宿,破碎], miscStars=[伏兵,天德,攀鞍], ageRange=[14-23], lifeStage=[帝旺]},
Cell {壬寅, temples=[命宮], majorStars=[貪狼 0], minorStars=[天馬], miniStars=[天哭,截空,天巫], miscStars=[大耗,弔客,歲驛], ageRange=[4-13], lifeStage=[臨官]},
Cell {癸卯, temples=[父母], majorStars=[天機 1,巨門 2], minorStars=[天魁], miniStars=[截空,天姚], miscStars=[病符,病符,息神], ageRange=[114-123], lifeStage=[冠帶]},
Cell {甲辰, temples=[福德], majorStars=[紫微 -1,天相 1], minorStars=[火星], miniStars=[封誥,天月], miscStars=[喜神,太歲,華蓋], ageRange=[104-113], lifeStage=[沐浴]},
Cell {乙巳, temples=[田宅], majorStars=[天梁 -1], minorStars=[天鉞], miniStars=[天喜,孤辰,劫煞,天空], miscStars=[蜚廉,晦氣,劫煞], ageRange=[94-103], lifeStage=[長生]},
Cell {丙午, temples=[身宮,事業], majorStars=[七殺 1], minorStars=[文曲,左輔], miniStars=[天福,鳳閣,解神,天才,旬空,蜚廉,八座], miscStars=[奏書,喪門,災煞], ageRange=[84-93], lifeStage=[養]},
Cell {丁未, temples=[交友], majorStars=[], minorStars=[], miniStars=[旬空,天貴,天使], miscStars=[將軍,貫索,天煞], ageRange=[74-83], lifeStage=[胎]},
Cell {戊申, temples=[遷移], majorStars=[廉貞 2], minorStars=[文昌,右弼], miniStars=[龍池,台輔,三台], miscStars=[小耗,官符,指背], ageRange=[64-73], lifeStage=[絕]},
Cell {己酉, temples=[疾厄], majorStars=[], minorStars=[地空], miniStars=[天廚,咸池,月德,恩光,天傷], miscStars=[青龍,小耗,咸池], ageRange=[54-63], lifeStage=[墓]},
Cell {庚戌, temples=[財帛], majorStars=[破軍 1], minorStars=[陀羅], miniStars=[天官,天虛,天壽,陰煞,解神], miscStars=[力士,歲破,月煞], ageRange=[44-53], lifeStage=[死]},
Cell {辛亥, temples=[子女], majorStars=[天同 2], minorStars=[祿存], miniStars=[紅鸞,大耗,天刑], miscStars=[博士,龍德,亡神], ageRange=[34-43], lifeStage=[病]}
],
#bornStarDerivativeMap: {"祿":"天梁","權":"紫微","科":"天府","忌":"武曲"}
}
use DestinyConfigBuilder.withSolar
instead of DestinyConfigBuilder.withlunar
for Solar Calendar date input parameters.
// 公曆1952年4月9日寅時女士
const destinyBoard = new DestinyBoard(
DestinyConfigBuilder.withSolar({
year: 1952,
month: 4,
day: 9,
bornTimeGround: DayTimeGround.getByName('寅時'),
configType: ConfigType.SKY,
gender: Gender.F,
}),
)
The library can parse your reasonable human description text and turn it into the board.
Basically we need such information from text:
- Calendar type (農曆/公曆)
- year
- month (and whether it is leap month)
- day
- Born time hour
- Gender
import { DestinyBoard, DestinyConfigBuilder, DayTimeGround, ConfigType, Gender } from 'fortel-ziweidoushu'
// 農曆1952年三月十五日寅時女士
const destinyBoard = new DestinyBoard(DestinyConfigBuilder.withText('農曆1952年三月十五日寅時女士'))
You can use BoardCriteria
to check broad criteria condition.
- 判斷兄弟宮是否有太陽, 地劫, 寡宿全部星。
- 判斷夫妻宮是否有武曲, 貪狼, 任意一顆星。
import { DestinyBoard, Temple, BoardCriteria, starByName, DestinyConfigBuilder, DayTimeGround, ConfigType, Gender } from 'fortel-ziweidoushu'
// 公曆1952年4月9日寅時出生女士
const destinyBoard = new DestinyBoard(DestinyConfigBuilder.withText('公曆1952年4月9日寅時出生女士'))
console.log(destinyBoard.toString())
console.log(
new BoardCriteria(destinyBoard).ofTemple(Temple.TEMPLE_BROTHER).hasAllStars([starByName('太陽'), starByName('地劫'), starByName('寡宿')])
)
console.log(
new BoardCriteria(destinyBoard).ofTemple(Temple.TEMPLE_MARRIAGE).hasAnyStars([starByName('武曲'), starByName('貪狼')])
)
DestinyBoard {
config: {"year":1952,"month":3,"day":15,"isLeapMonth":false,"yearSky":"壬","yearGround":"辰","monthSky":"甲","monthGround":"辰","daySky":"乙","dayGround":"酉","bornTimeGround":"寅時","configType":"天盤","gender":"女
"},
element: 金四局,
destinyMaster: 廉貞,
bodyMaster: 文昌,
startControl: 子,
cells: [
Cell {壬子, temples=[夫妻], majorStars=[武曲 1,天府 2], minorStars=[鈴星,擎羊], miniStars=[], miscStars=[官府,白虎,將星], ageRange=[24-33], lifeStage=[衰]},
Cell {癸丑, temples=[兄弟], majorStars=[太陽 -1,太陰 2], minorStars=[地劫], miniStars=[寡宿,破碎], miscStars=[伏兵,天德,攀鞍], ageRange=[14-23], lifeStage=[帝旺]},
......
],
#bornStarDerivativeMap: {"祿":"天梁","權":"紫微","科":"天府","忌":"武曲"}
}
true
true
new BoardCriteria(destinyBoard).ofTemple(Temple.TEMPLE_BROTHER)
This means building a checking criteria of the broad for target temple TEMPLE_BROTHER (兄弟宮).
.hasAllStars([starByName('太陽'), starByName('地劫'), starByName('寡宿')])
This means we check for the temple having ALL stars 太陽, 地劫, 寡宿.
.hasAnyStars([starByName('武曲'), starByName('貪狼')])
This means we check for the temple having ANY ONE OF stars 武曲, 貪狼.
(Sorry if it is bad translation.)
After you build the destiny board object, you can then call the "getRuntimContext" method to get the context info.
const runtimeContext = destinyBoard.getRuntimContext({
lunarYear: 2023,
lunarMonth: 5,
lunarDay: 1,
leap: false,
})
The type of RuntimeContext is like this:
export type RuntimeContext = {
tenYear: {
cellGround: Ground | null
groundStars: Map<Ground, MinorStar[]> | null
starDerivativeMap: Map<MajorStar | MinorStar, StarDerivative> | null
}
year: {
cellGround: Ground | null
groundStars: Map<Ground, MinorStar[]> | null
starDerivativeMap: Map<MajorStar | MinorStar, StarDerivative> | null
}
month: {
cellGround: Ground | null
groundStars: Map<Ground, MinorStar[]> | null
starDerivativeMap: Map<MajorStar | MinorStar, StarDerivative> | null
}
day: {
cellGround: Ground | null
groundStars: Map<Ground, MinorStar[]> | null
starDerivativeMap: Map<MajorStar | MinorStar, StarDerivative> | null
}
yearSky: Sky
yearGround: Ground
monthSky: Sky
monthGround: Ground
daySky: Sky
dayGround: Ground
age: number
effectiveMonth: number
tenYearGround: Ground
tenYearSky: Sky
}
At the root level, tenYear is 十年/大運, year is 流年, month is 流月, day is 流日. Other attribites are extra info of the date.
At the second level,
- cellGround : Destiny Temple ground.
- groundStars : Map of Temple ground to star
- starDerivativeMap : Map of star derivative.
中文翻譯這段:
- cellGround : 流X命宮地支
- groundStars : 流X飛星表, key是地支, value是該宮所擁有的飛星
- starDerivativeMap : 流X四化表, key是星, value是化祿/科/權/忌
Airic Yu
- Owner of Myfortel 紫微斗數起盤網站(舊版) ( https://www.myfortel.com/ )
- Owner of Myfortel 紫微斗數起盤網站(新版) ( https://airicyu.github.io/myfortel/ )
- Author of 紫微斗數排盤 library for Java ( https://github.com/airicyu/Fortel )
- Author of 紫微斗數排盤 library for JS ( https://www.npmjs.com/package/fortel-ziweidoushu )
Jea杨 - Thanks for his lunar/solar calendar conversion library ( https://github.com/jjonline/calendar.js )