Javascript實現(xiàn)生辰八字五行查詢 | 您所在的位置:網(wǎng)站首頁 › 生辰八字五行推算 › Javascript實現(xiàn)生辰八字五行查詢 |
前段時間寶寶出生了,興奮之余,一直忙著給寶寶選名字,想起網(wǎng)上各式各樣的五行查詢,出于好奇研究了下算法,于是自己也試著寫了個小程序。先上張截圖:
當(dāng)然,首先就要先理解最基本的,什么是天干地支,什么是生辰八字,什么是五行。 1. 什么是天干地支天干地支,簡稱為干支,源自遠(yuǎn)古時代對天象的觀測。”甲、乙、丙、丁、戊、己、庚、辛、壬、癸”稱為十天干,”子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥”稱為十二地支。天干地支組成形成了古代紀(jì)年歷法。十干和十二支依次相配,組成六十個基本單位,兩者按固定的順序相互配合,組成了干支紀(jì)法。 2. 什么是生辰八字生辰八字,簡稱八字,是指一個人出生時的干支歷日期;年月日時共四柱干支,每柱兩字,合共八個字,故稱。生辰八字在漢族民俗信仰中占有重要地位,古代漢族星相家據(jù)此推算人的命運的好壞。在歷書中,年的干支與日的干支基本都有,而月與時的天干可以依據(jù)年、日的干支按口訣推算得出。上面說的年月日時干支,意思是把日期分成四部分:年、月、日、時。而每個日期又有天干和地支兩部分,因此合起來就是:年干、年支、月干、月支、天干、天支、時干、時支。眾所周知,一個時辰是兩個小時,具體的對應(yīng)關(guān)系如下: 子時 丑時 寅時 卯時 辰時 己時 23:00-00:59 01:00-02:59 03:00-04:59 05:00-06:59 07:00-08:59 09:00-10:59 午時 未時 申時 酉時 戊時 亥時 11:00-12:59 13:00-14:59 15:00-16:59 17:00-18:59 19:00-20:59 21:00-22:59 3. 什么是五行五行是中國自古以來道學(xué)的一種系統(tǒng)觀,廣泛地用于中醫(yī)學(xué)、堪輿、命理、相術(shù)和占卜等方面。五行的意義包涵借著陰陽演變過程的五種基本動態(tài):水(代表潤下)、火(代表炎上)、金(代表收斂)、木(代表伸展)、土(代表中和)。中國古代哲學(xué)家用五行理論來說明世界萬物的形成及其相互關(guān)系。它強調(diào)整體概念,旨在描述事物的運動形式以及轉(zhuǎn)化關(guān)系。 4. 怎么知道哪個時辰的八字都是什么首先知道天干、地支的五行含義: 甲 乙 丙 丁 戊 己 庚 辛 壬 癸 木 木 火 火 土 土 金 金 水 水 1 2 3 4 5 6 7 8 9 10 11 12 寅 卯 辰 巳 午 未 申 酉 戌 亥 子 丑 水 土 木 木 土 火 火 土 金 金 土 水具體的八字推算,老祖宗已經(jīng)幫我們總結(jié)好了,問問度娘可以發(fā)現(xiàn)有很多種方法,我這里采用比較簡單也易實現(xiàn)的一種: 年干支推算:1.年干公式:年干=年份個位數(shù)- 3 (適用于任何西元年,個位數(shù)小于3,借10)2.年支公式:年支=(年份+7)÷12余數(shù)(整除余0,即余12=丑) 通過以上公式,可以得出年干、年支與自然數(shù)的對應(yīng)關(guān)系。天干地支紀(jì)年法首先是天干在前,地支在后,比如今年2016就為——丙申年。 月干支推算:月的地支是固定不變的:正月是寅,二月是卯,三月是子,依次類推…..也就是用年支的推算方式,年支和月支應(yīng)該正好一致。月干公式:月干=年干x2+月支 (和超過10,直接取個位數(shù)) 例:已知2015年為乙未年,求2015年申月天干?解:2015年乙未年,天干為乙,乙=2,申=7 日干推算:日干推算比較復(fù)雜,我這里使用高氏日柱公式來進(jìn)行推算。公式如下(具體含義可參考高氏日柱公式): r=s/46+5(s/4*3+u)+m+d+x 日支推算:我這里采用的是用六十甲子表,直接查詢?nèi)崭山Y(jié)果在甲子表中對應(yīng)的值。 時干推算:①時支公式:時支=小時÷2-1(小時為偶數(shù)),時支=(小時+1)÷2-1(小時為奇數(shù))②時干公式:時干=日干×2+時支 (晨子=-1,夜子=11) 在這里吐槽一下網(wǎng)上流傳很廣的那些帖子,我找的六十甲子基本都是把自己的“己”給錯寫成了已經(jīng)的“已”,導(dǎo)致有些日期查詢異常。 到這里,知道了八字的計算方式和與自然數(shù)的對應(yīng)關(guān)系,因此,可以用數(shù)組來描述這些關(guān)系,因為月干是需要與年份有關(guān)的,因此可以定義一個函數(shù)來獲取:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110//天干序數(shù):1(甲),2(乙),……var __TianGan = ['', '甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'], //地支序數(shù):1(寅),2(卯),…… __NianZhi = ['', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥', '子', '丑'], //月的地支序數(shù):寅月為正月,…… __YueZhi = ['', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥', '子', '丑'], __WuXing = { '甲': '木', '乙': '木', '丙': '火', '丁': '火', '戊': '土', '己': '土', '庚': '金', '辛': '金', '壬': '水', '癸': '水', '寅': '木', '卯': '木', '辰': '土', '巳': '火', '午': '火', '未': '土', '申': '金', '酉': '金', '戌': '土', '亥': '水', '子': '水', '丑': '土' }, __JiaZi = [undefined, '甲子', '乙丑', '丙寅', '丁卯', '戊辰', '已巳', '庚午', '辛未', '壬申', '癸酉', '甲戌', '乙亥', '丙子', '丁丑', '戊寅', '已卯', '庚辰', '辛巳', '壬午', '癸未', '甲申', '乙酉', '丙戌', '丁亥', '戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳', '甲午', '乙未', '丙申', '丁酉', '戊戌', '已亥', '庚子', '辛丑', '壬寅', '癸卯', '甲辰', '乙巳', '丙午', '丁未', '戊申', '已酉', '庚戌', '辛亥', '壬子', '癸丑', '甲寅', '乙卯', '丙辰', '丁巳', '戊午', '已未', '庚申', '辛酉', '壬戌', '癸亥' ], //時干支 __ShiGanZhi = { '-1': '子', '0': '丑', '1': '寅', '2': '卯', '3': '辰', '4': '巳', '5': '午', '6': '未', '7': '申', '8': '酉', '9': '戌', '10': '亥', '11': '子' }; /** * 獲取年干。公式:年干=年份個位數(shù)-3。適用于任何西元年,個位數(shù)小于3時,借10 * @param {Object} year */ function getNianGanIndex(year) { //年干=年份個位數(shù)-3,個位數(shù)小于2,借10 var index = Number(year.toString().slice(-1, year.length)); index 2) { r += 1; } r %= 60; r === 0 && (r = 60); return r;} 現(xiàn)在來想一下程序的結(jié)構(gòu):我希望的是和那些網(wǎng)站一樣,選擇出生年月日時,就可以給出結(jié)果。因此,可以定義成一個工具類,輸入是日期對象,輸出是八字和五行的分析結(jié)果。 另外,上面的公式只適用于公歷,我希望可以用農(nóng)歷和公歷兩種方法進(jìn)行推算。這里用到了一個插件calendar.js,可以進(jìn)行公歷農(nóng)歷的轉(zhuǎn)換。 完整Demo點擊下面鏈接(因為關(guān)注點沒在日期校驗上,所以對于日期并沒有增加校驗,如下拉列表每月的天數(shù)): 時辰八字五行分析 |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有 |