有谁知道js的农历算法是怎么写出来的

JavaScript09

有谁知道js的农历算法是怎么写出来的,第1张

其实我也不懂这个算法,网上粘贴的,我觉得可以不去深究这个公式,反正有现成代码:

设:公元年数-1977(或1901)=4Q+R

则:阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n

(注:式中Q、R、n均为自然数,R<4)

例:1994年5月7日的阴历日期为:

1994-1977=17=4×4+1

故:Q=4,R=1 则:5月7日的阴历日期为:

14×4+10.6(1+1)+(31+28+31+30+7)-29.5n

=204.2- 29.5n

然后用29.5去除204.2得商数6......27.2,6即是n值,余数27即是阴历二十七日。

<script language="JavaScript">

<!--

var bsYear

var bsDate

var bsWeek

var arrLen=8//数组长度

var sValue=0//当年的秒数

var dayiy=0//当年第几天

var miy=0//月份的下标

var iyear=0//年份标记

var dayim=0//当月第几天

var spd=86400//每天的秒数

var year1999="302929302929302930303029"//354

var year2000="303029293029293029303029"//354

var year2001="30302930293029293029302930"//384

var year2002="303029302930292930293029"//354

var year2003="303029303029302929302930"//355

var year2004="29302930302930293029302930"//384

var year2005="293029302930302930293029"//354

var year2006="30293029303029293030292930"

var month1999="正月二月三月四月五月六月七月八月九月十月十一月十二月"

var month2001="正月二月三月四月闰四月五月六月七月八月九月十月十一月十二月"

var month2004="正月二月闰二月三月四月五月六月七月八月九月十月十一月十二月"

var month2006="正月二月三月四月五月六月七月闰七月八月九月十月十一月十二月"

var Dn="初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十"

var Ys=new Array(arrLen)

Ys[0]=919094400Ys[1]=949680000Ys[2]=980265600

Ys[3]=1013443200Ys[4]=1044028800Ys[5]=1074700800

Ys[6]=1107878400Ys[7]=1138464000

var Yn=new Array(arrLen)//农历年的名称

Yn[0]="己卯年"Yn[1]="庚辰年"Yn[2]="辛巳年"

Yn[3]="壬午年"Yn[4]="癸未年"Yn[5]="甲申年"

Yn[6]="乙酉年"Yn[7]="丙戌年"

var D=new Date()

var yy=D.getYear()

var mm=D.getMonth()+1

var dd=D.getDate()

var ww=D.getDay()

if (ww==0) ww="<font color=RED>星期日"

if (ww==1) ww="星期一"

if (ww==2) ww="星期二"

if (ww==3) ww="星期三"

if (ww==4) ww="星期四"

if (ww==5) ww="星期五"

if (ww==6) ww="<font color=RED>星期六"

ww=ww

var ss=parseInt(D.getTime() / 1000)

if (yy<100) yy="19"+yy

for (I=0I<arrLenI++)

if (ss>=Ys[I])...{

iyear=I

sValue=ss-Ys[I]//当年的秒数

}

dayiy=parseInt(sValue/spd)+1//当年的天数

var dpm=year1999

if (iyear==1) dpm=year2000

if (iyear==2) dpm=year2001

if (iyear==3) dpm=year2002

if (iyear==4) dpm=year2003

if (iyear==5) dpm=year2004

if (iyear==6) dpm=year2005

if (iyear==7) dpm=year2006

dpm=dpm.split("")

var Mn=month1999

if (iyear==2) Mn=month2001

if (iyear==5) Mn=month2004

if (iyear==7) Mn=month2006

Mn=Mn.split("")

var Dn="初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十"

Dn=Dn.split("")

dayim=dayiy

var total=new Array(13)

total[0]=parseInt(dpm[0])

for (I=1I<dpm.length-1I++) total[I]=parseInt(dpm[I])+total[I-1]

for (I=dpm.length-1I>0I--)

if (dayim>total[I-1])...{

dayim=dayim-total[I-1]

miy=I

}

bsWeek=ww

bsDate=yy+"年"+mm+"月"

bsDate2=dd

bsYear="农历"+Yn[iyear]

bsYear2=Mn[miy]+Dn[dayim-1]

if (ss>=Ys[7]||ss<Ys[0]) bsYear=Yn[7]

function CAL(){

document.write("<table border='1' cellspacing='3' width='90' bordercolor='#000000' bgcolor='#FFFFFF' height='110' cellpadding='2'")

document.write("<tr><td align='center'><b><font color=#008040>"+bsDate+"</font><br><font face='Arial' size='6' color=#FF8040>"+bsDate2+"</font><br><font color=#008040><span style='FONT-SIZE: 10.5pt'>")

document.write(bsWeek+"</span><br>"+"<br></b><font color=#9B4E00>")

document.write(bsYear+"<br>"+bsYear2+"</td></tr></table>")

}

//-->

</script>

<script language="javascript">CAL()</script>