var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
天干地支的组合,60为一个循环,干支数值:甲子=0...癸亥=59。根据干支数值获得天干地支名称:
function cyclical(num){return(Gan[num%10]+Zhi[num%12]);}
设年月日时为(sYear,sMonth,sDay,sHour),求四柱干支值(cy,cm,cd,ch)
干支年
根据1900年为庚子年,数值为36。
var cy = sYear - 1900 + 36;
if (jieqi_index < 2) cy--;
if (cy < 0) cy = 59;
因为干支年以立春为分隔,而立春在2月4日左右,在立春前的日子属于上一个干支年。此处jieqi_index表示当前时间所在的节气编号,立春编号为2。 节气的计算需要查表,另文叙述。
干支月
根据1900年元旦的月干支值为12。
var cm=(sYear-1900)*12+sMonth+12;
if(sDay<=jieqi_day1) cm--;
if(cm<0) cm=59;
干支月以每月的第一个节气为分隔,所以第一个节气(jieqi_day1)之前,算上一个月。
干支日时
1900年元旦的日值为10。
var cd = Date.UTC(sYear,sMonth-1,sDay)/86400000+25567+10;
var TianGan=cd%10;
var S=TianGan*12; //甲日起甲时
var ch=(S+(sHour+1)/2)%60;
if(sHour>=23){
cd++;
if(cd>59) cd=0;
}
1970年和1900年差25567天。
两小时为一个时辰,5天一个循环。根据日值可直接计算出当日零点的时值。要注意子时属于第二天。
返回当日零点的八字:
return cyclical(cy)+cyclical(cm)+cyclical(cd)+cyclical(ch);