mobilefzb 发表于 2011-5-1 11:26:44

请大家看看这个公历转为日干支的算法是否准确

大家看看这个公历转为日干支的算法是否准确

这个算法网上找的,我试了试,还比较准,然后有些小错误我修改了下。测试数据还不多。还希望大家帮忙测试下
如果会JavaScript可以直接将这个功能放到里面去测试
//日干支计算方法
//参数:year——公历的年month——公历月date——公历日
function dateGanZhiMake(year,month,date)
{
    var abigMonth = new Array(3,5,7,8,10,12,1);
    if(month < 2)
      year -= 1;
    document.write("year的值:" + year);
    var iValue1 = (year % 100 + ((year >= 2000) ? 100 : 0)) * 5 % 60;
    document.write("iValue的值:" + iValue1);
    var iValue2 = ((year % 100 + ((year >= 2000) ? 100 : 0)) - (year % 100 + ((year >= 2000) ? 100 : 0)) % 4) / 4;
    document.write("iValue2的值:" + iValue2);
    //得到大月的个数
    var i;
    for(i = 0;i < 7;i++)
    {
      if(0 == month)
      {
            i = 6;
            break;
      }
      else if(1 == month)
      {
            i = 7;
            break;
      }
      else if(abigMonth >= month + 1)
      {
            //i -= 1;
            break;
      }
    }

    //document.write("i的值:" + i);
    var result;
    result = iValue1 + iValue2 + 9 + date + i;
    ((month + 1) % 2) ? result -= 0 : result -= 30;
    if(result > 60)
      result -= 60;
    document.write("运行到了这里!" + result);
    return result;
}

要按公历心算任意一天的纪日干支,只需将公历年号乘以5,加公历年号除以4、加上9、加上日期,再加已经过去了几个大月,得数便是干支序号。如月份为双数,则间隔30天,使用此法一律以3月1日作为当年的起点,日期在3月1日以前,年号按上年论。公历大月从3月起。依次为3、5、7、8、10、12、1七个。
    所谓干支序号便是60花甲的次序,如甲子为1、乙丑为2,丙寅为3直至壬戌为59癸亥为60。在使用中,可牢记甲子为1,甲戌为11,甲申为21,甲午为31,甲辰为41,甲寅为51,再依此顺数,将序号化为干支、此法可用歌诀概括如下:
      乘五除四九加日,双月间隔三十天。
      三五七八十尾头,此为妙法记心间。
    例1,1949年10月1日,年号49X5=245,扣除60的倍数后余5,49/4=12,常数为9,日期为1,共遇3、5、7、8四个大月,月份为双数,按诀心算:5十12+9+l+4—30= 1,则1949年10月1日为甲子。
  例2,1919年5月4日,年号19X5= 95,扣除6O的倍数后余35,19/4=4,常数为9,日期为4,只遇3月一个大月,月份为单数,按诀心算:35+4+9+4+1=53,则1919年5月4日为丙辰。
    例3,1964年2月27日,丙日期在3月前年号以63年论,63X5=315,扣除60的倍数后余15,63/4=15,常数为9,日期为27,共遇7个大月,月份为双数,按决心算;15+15+9+27+7-30=43,则1964年2月27日为丙午。
    最后说明一点,下个世纪使用此法,年号一律加上IO0,如2000年以10O论,2013年以113论。如果此法算出的序号大于60,则要将纪日法转入到头去,即减去60,这样算得当前的日干支。

碧海青天w 发表于 2011-5-2 08:46:06

没法看,乱的
页: [1]
查看完整版本: 请大家看看这个公历转为日干支的算法是否准确