紫微斗数排盘JS算法 源码 和解析

1  自己看注释 doushu.js



var dizhiarry=["\u5b50","\u4e11","\u5bc5","\u536f","\u8fb0","\u5df3","\u5348","\u672a","\u7533","\u9149","\u620c","\u4ea5"];//地支
var tianganarry=["\u7532","\u4e59","\u4e19","\u4e01","\u620a","\u5df1","\u5e9a","\u8f9b","\u58ec","\u7678"];//天干
/*
*斗数宫
*/
/*
var doushugong = {
		var dizhi,//地支
		var tiangan,//天干
		var xingqiu=[],//星宿
		var gongming,//宫名 如身宫,迁移宫
		var startyear,//大运开始年限
		var endyear,//结束年限 
}*/
/*
*斗数盘
*/
/**
var doushupan = {
	var wuxinggu,//五行局
	var sihua,//四化星系
	var doushugongarry, 
}*/
/**
* @紫微斗数排盘
* @charset UTF-8
* @Author  zhu_min726@126.com 
* @Version 1.0.3
* @公历斗数排盘 :doushupan.paipangongli(1987,11,01); //[you can ignore params of prefix 0]

@ 农历斗数排盘:doushupan.doushupannongli(1987,11,01,0); //年月日时//[you can ignore params of prefix 0]
* @干支斗数排盘:doushupan.doushupanganzhi(甲子甲子,甲子,甲子); //[you can ignore params of prefix 0]
*/
var doushu = {
	
	
	paipangongli:function(y,m,d,h) {
		 
		 
	},
	//子午安身铃火宿,丑未天相寅申梁,卯酉天同身主是,巳亥天机辰戌昌
	getshengzhu:function(nianzhi){
		var shenzdic=new Map();
		shenzdic.set('子','火铃');
		shenzdic.set('丑','天相');
		shenzdic.set('卯','天同');
		shenzdic.set('巳','天机');
		shenzdic.set('寅','天梁');
		shenzdic.set('辰','文昌');
		shenzdic.set('午','火铃');
		shenzdic.set('未','天相');
		shenzdic.set('酉','天同');
		shenzdic.set('亥','天机');
		shenzdic.set('申','天梁');
		shenzdic.set('戌','文昌');

		return shenzdic.get(nianzhi);
	},
	//子属贪狼丑亥门,寅戌生人属禄存。卯酉属文巳未武,辰申廉宿午破军
	getmingzhu:function(gongwei){
		var minggdic=new Map();
		minggdic.set('亥','巨门');
		minggdic.set('戌','禄存');
		minggdic.set('酉','文曲');
		minggdic.set('申','廉贞');
		minggdic.set('未','武曲');
		minggdic.set('子','贪狼');
		minggdic.set('丑','巨门');
		minggdic.set('寅','禄存');
		minggdic.set('卯','文曲');
		minggdic.set('辰','廉贞');
		minggdic.set('巳','武曲');
		minggdic.set('午','破军');
		return minggdic.get(gongwei);
	},
	nayinwuxing:function(ganzhi){
		var nywxdic=new Map();
		nywxdic.set('甲子','海中金');
		nywxdic.set('甲午','沙中金');
		nywxdic.set('丙寅','炉中火');
		nywxdic.set('丙申','山下火');
		nywxdic.set('戊辰','大林木');
		nywxdic.set('戊戌','平地木');
		nywxdic.set('庚午','路旁土');
		nywxdic.set('庚子','壁上土');
		nywxdic.set('壬申','剑锋金');
		nywxdic.set('壬寅','金箔金');
		nywxdic.set('甲戌','山头火');
		nywxdic.set('甲辰','覆灯火');
		nywxdic.set('丙子','涧下水');
		nywxdic.set('丙午','天河水');
		nywxdic.set('戊寅','城头土');
		nywxdic.set('戊申','大驿土');
		nywxdic.set('庚辰','白蜡金');
		nywxdic.set('庚戌','钗钏金');
		nywxdic.set('壬午','杨柳木');
		nywxdic.set('壬子','桑柘木');
		nywxdic.set('甲申','泉中水');
		nywxdic.set('甲寅','大溪水');
		nywxdic.set('丙戌','屋上土');
		nywxdic.set('丙辰','沙中土');
		nywxdic.set('戊子','霹雳火');
		nywxdic.set('戊午','天上火');
		nywxdic.set('庚寅','松柏木');
		nywxdic.set('庚申','石榴木');
		nywxdic.set('壬辰','长流水');
		nywxdic.set('壬戌','大海水');
		nywxdic.set('乙丑','海中金');
		nywxdic.set('乙未','沙中金');
		nywxdic.set('丁卯','炉中火');
		nywxdic.set('丁酉','山下火');
		nywxdic.set('己巳','大林木');
		nywxdic.set('己亥','平地木');
		nywxdic.set('辛未','路旁土');
		nywxdic.set('辛丑','壁上土');
		nywxdic.set('癸酉','剑锋金');
		nywxdic.set('癸卯','金箔金');
		nywxdic.set('乙亥','山头火');
		nywxdic.set('乙巳','覆灯火');
		nywxdic.set('丁丑','涧下水');
		nywxdic.set('丁未','天河水');
		nywxdic.set('己卯','城头土');
		nywxdic.set('己酉','大驿土');
		nywxdic.set('辛巳','白蜡金');
		nywxdic.set('辛亥','钗钏金');
		nywxdic.set('癸未','杨柳木');
		nywxdic.set('癸丑','桑柘木');
		nywxdic.set('乙酉','泉中水');
		nywxdic.set('乙卯','大溪水');
		nywxdic.set('丁亥','屋上土');
		nywxdic.set('丁巳','沙中土');
		nywxdic.set('己丑','霹雳火');
		nywxdic.set('己未','天上火');
		nywxdic.set('辛卯','松柏木');
		nywxdic.set('辛酉','石榴木');
		nywxdic.set('癸巳','长流水');
		nywxdic.set('癸亥','大海水');
		return nywxdic.get(ganzhi);

	},
	/**
      * 传入干支获得干支斗数排盘信息 <=>JSON
      * @param y    year
      * @param m    month
      * @param d    day
      * @param y   hour
	  @param m2    农历月份,考虑闰月情况
	  @param d2   农历出生日期,考虑闰月情况
      * @return doushupan
      *  
      */
    doushupanganzhi:function(y,m,d,h,m2,d2) { 
		var doushupan=new Object();
		 
		/**
		var wuxinggu,//五行局
		var sihua,//四化星系
		var doushugongarry, 
		var shiergongindexarry;十二宫 名字数组
		var tianganarry;//十二宫天干
		var wuxingju ;五星局var  ziweiindex紫薇地支宫位
		var xingarry;
		*/
		//1 算命宫, 正月起寅,顺数生月。落处起时,逆命顺身
		yuezhi=m.substr(1,2);
		//alert(yuezhi);
		indextmp=m2;
		//alert(indextmp);
		indextmp=indextmp+1;
		if(indextmp>12){
			indextmp=indextmp-12;
		} 
		 
		 
		shizhi=h.substr(1,2);//时支
		shinum=doushu.getIndexDiZhi(shizhi);
		 
		shennum=indextmp+shinum;
		 
		if(shennum>=12){
			shennum=shennum-12;
		}
		
		mingnum=indextmp-shinum;
		if(mingnum<0){
			mingnum=mingnum+12;
		}
		doushupan.shen=dizhiarry[shennum];
		doushupan.ming=dizhiarry[mingnum];
	//	alert(shennum);
		//alert(mingnum);
		
		//四化 ,"甲廉破武阳,乙机梁紫阴;丙同机昌廉,丁阴同机巨;戊贪阴右机,己武贪梁曲;庚阳武阴同,辛巨阳曲昌;壬梁紫左武,癸破巨阴贪。"
		var sihua;
		switch(y.substr(0,1)){
			case '甲':sihua="甲廉破武阳";break;
			case '乙':sihua="乙机梁紫阴";break;;
			case '丙':sihua="丙同机昌廉";break;;
			case '丁':sihua="丁阴同机巨";break;;
			case '戊':sihua="戊贪阴右机";break;;
			case '己':sihua="己武贪梁曲";break;;
			case '庚':sihua="庚阳武阴同";break;;
			case '辛':sihua="辛巨阳曲昌";break;;
			case '壬':sihua="壬梁紫左武";break;;
			case '癸':sihua="癸破巨阴贪";break;;
			 default:break;
		}
		
		
		doushupan.sihua=sihua;
		doushupan.sihuadetail=doushu.getsihuyadetail(sihua);//全名 []
		
		//shennum 身宫位置  mingnum命宫位置
		//alert(shennum);
		//alert(mingnum);
		//2 排12宫命兄妻子财,疾迁友官宅,福父逆宫排。
		doushupan.shiergongindexarry=doushu.getSheergongindexarry(mingnum,shennum); 
		//3宫位天干   口诀:甲己之年丙为首,乙庚之岁戊打头,丙辛之干由庚起,丁壬生年仍为壬,戊癸之年甲干留。
		var yeargan=y.substr(0,1);
		 
		doushupan.tianganarry= doushu.getTianGanIndexArry(yeargan);
		//4 五行局 4.1取命宫干支 ,查表
		minggan=doushupan.tianganarry[mingnum];
		minggannum=doushu.getIndexTianGan(minggan);
		doushupan.wuxingju=doushu.getwuxingju(minggannum,mingnum);
		//5 装紫微星,农历日除以五行数,如木三局除以3
		var wuxingshu=doushupan.wuxingju.substr(1,1);
		var wuxingshunum=0;
		switch (wuxingshu){
			case '二':wuxingshunum=2;break;
			case '三':wuxingshunum=3;break;
			case '四':wuxingshunum=4;break;
			case '五':wuxingshunum=5;break;
			case '六':wuxingshunum=6;break;
			default:;
		}
		 var bushushutmp=0;
		 var chushutmp=0;
		 var diwangshu=0;
		if(d2%wuxingshunum!=0){
			bushushutmp=wuxingshunum-d2%wuxingshunum;//奇逆,偶顺
			chushutmp=Math.ceil(d2/wuxingshunum);
			if(bushushutmp%2==0){
				//偶数
				diwangshu=bushushutmp+chushutmp;
			}else {
				//奇数
				diwangshu=chushutmp-bushushutmp;
			}
		}else{
			diwangshu=d2/wuxingshunum;
		}
		 
		var ziweiindex= 1+diwangshu;//2是寅宫 -1
		if(ziweiindex<0){
			ziweiindex=ziweiindex+12;
		}else if(ziweiindex>=12){
			ziweiindex=ziweiindex-12;
		}
		doushupan.ziweiindex=ziweiindex;
		//初始化星宿数组。并把紫微星放进第N个数组,N为紫薇所在地支的位置。
		var xingarry=doushu.initxingArry();
		xingarry[ziweiindex].push("紫薇");
		 
		 //  6 紫薇星系口诀:紫微天机逆行旁,隔一阳武天同当,又隔两位廉贞地,空三又见紫微郎。
		//ziweiindex-1天机、天机-2太阳
		xingarry=doushu.setZiweixingxi(xingarry,ziweiindex);
		
		//7设置天府星系  天府太阴与贪狼,巨门天相及天梁,七杀空三破军位,八星顺数细推祥。
		var tianfuindex=doushu.formatdizhi(4-ziweiindex);
		
		xingarry=doushu.setTianfuxingxi(xingarry,tianfuindex);
		//8设置生月星系 左辅正月起于辰,顺逢生月是贵门,右弼正月戌宫寻,逆至生月安其神。 
		 //左辅(顺)右弼(逆) 正月辰(4) 正月戌10 
		 zuofuindex=doushu.formatdizhi(4+m2-1);//-1 正月为0
		 xingarry[zuofuindex].push("左辅");
		 
		 youbiindex=doushu.formatdizhi(10-m2+1);//正月为0
		 xingarry[youbiindex].push("右弼");
		//天姚 天刑,顺时 正月天姚 丑1 天刑 酉9
		 xingarry[doushu.formatdizhi(1+m2-1)].push("天姚");
		 xingarry[doushu.formatdizhi(9+m2-1)].push("天刑");
		  //9年干星系 天马 禄存 擎羊 陀罗 天魁 天钺 
		 //生年安天马口诀:寅午戌在申8,申子辰在寅2,巳酉丑在亥11,亥卯未在巳5。 
		
       
		 switch(y.substr(1,1)){
			 case '寅':;
			  case '午':;
			   case '戌': xingarry[doushu.formatdizhi(8)].push("天马");break;
			   case '申':;
			  case '子':;
			   case '辰': xingarry[doushu.formatdizhi(2)].push("天马");break;
			     case '巳':;
			  case '酉':;
			   case '丑': xingarry[doushu.formatdizhi(11)].push("天马");break;
			     case '亥':;
			  case '卯':;
			   case '未': xingarry[doushu.formatdizhi(5)].push("天马");break;
			 default:;
		 }
		 /**
		  
		 */
		 //禄存  甲生禄存在寅宫,乙生在卯丙戊巳5,丁己禄存停午6方, 庚禄居申8辛禄酉9,壬禄在亥11癸子0藏,禄后陀罗前擎羊。
		
		 switch(y.substr(0,1)){
			 case '甲':xingarry[ 2].push("禄存");xingarry[ 1].push("陀罗");xingarry[ 3].push("擎羊");break;
			 case '乙':xingarry[ 3].push("禄存");xingarry[ 2].push("陀罗");xingarry[ 4].push("擎羊");break;;
			 case '丙':xingarry[ 5].push("禄存");xingarry[ 4].push("陀罗");xingarry[ 6].push("擎羊");break;;
			 case '丁':xingarry[ 6].push("禄存");xingarry[ 5].push("陀罗");xingarry[ 7].push("擎羊");break;;
			 case '戊':xingarry[ 5].push("禄存");xingarry[ 4].push("陀罗");xingarry[ 6].push("擎羊");break;;
			 case '己':xingarry[ 6].push("禄存");xingarry[ 5].push("陀罗");xingarry[ 7].push("擎羊");break;;
			 case '庚':xingarry[ 8].push("禄存");xingarry[ 7].push("陀罗");xingarry[ 9].push("擎羊");break;;
			 case '辛':xingarry[ 9].push("禄存");xingarry[ 8].push("陀罗");xingarry[ 10].push("擎羊");break;;
			 case '壬':xingarry[ 11].push("禄存");xingarry[ 10].push("陀罗");xingarry[ 0].push("擎羊");break;;
			  case '癸':xingarry[ 0].push("禄存");xingarry[ 11].push("陀罗");xingarry[ 1].push("擎羊");break;;
			 
			 default:break;
		 }
	 
		// 天魁 天钺 
		/**甲戊庚牛(1)羊(7),乙己鼠(0)猴( 8)乡,六辛逢马(6)虎(2), 
  壬癸兔(3)蛇(5)藏,丙丁猪(11)鸡(9)位,此是魁钺方。 
  (如:甲、戊、庚年生人,天魁在丑宫,天钺在未宫。 
  乙、己年生人天魁在子宫,天钺在申宫……) */
		 switch(y.substr(0,1)){
			 case '甲':;
			 case 
  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值