/返回农历日数及日月食信息的函数,如-324.57923415,负号表示闰月,百位3表示月偏食(2为月全食,1为日食0为无食),百位及十位表示日数,小数部分是朔望时刻(单位为天,若该天不朔或望则小数部分为零)
function lunDate(y,m,d){
var t=(y-1899.5)/100;
var ms=floor((y-1900)*12.3685);
var rpi=180/PI();
var zone=8; //时区
var f0=ang(ms,t,0,0.75933,2.172e-4,1.55e-7)+0.53058868*ms-8.37e-4*t+zone/24+0.5;
var fc=0.1734-3.93e-4*t;
var j0=693595+29*ms;
var aa0=ang(ms,t,0.08084821133,359.2242/rpi,0.0000333/rpi,0.00000347/rpi);
var ab0=ang(ms,t,7.171366127999999e-2,306.0253/rpi,-0.0107306/rpi,-0.00001236/rpi);
var ac0=ang(ms,t,0.08519585128,21.2964/rpi,0.0016528/rpi,0.00000239/rpi);
var leap=0; //闰月数,0则不闰
var ecli=0; //日月食
var lunD=-1; //农历日数
var shuoD=0; //本阴历月的阴历朔日数
var shuoT=0; //本阴历月的朔时刻
var wangD=0; //本阴历月的望时刻
var wangT=0; //本阴历月的阴历望日数
for(var k=-1;k<=13;k+=0.5){ //k=整数为朔,k=半整数为望
var aa=aa0+0.507984293*k;
var ab=ab0+6.73377553*k;
var ac=ac0+6.818486628*k;
var f1=f0+1.53058868*k+fc*sin(aa)-0.4068*sin(ab)+0.0021*sin(2*aa)+0.0161*sin(2*ab)+0.0104*sin(2*ac)-0.0074*sin(aa-ab)-0.0051*sin(aa+ab);
var j=j0+28*k+f1; //朔或望的等效标准天数及时刻
//记录当前日期的j值
var lunD0=erD(y,m,d)-floor(j); //当前日距朔日的差值
if(k==floor(k)&&lunD0>=0&&lunD0<=29){
var k1=k; //记录当前时间对应的k值
shuoT=tail(j);
lunD=lunD0+1;
}
if(k==(k1+0.5)){
wangT=tail(j);
wangD=floor(j)-(erD(y,m,d)-lunD+1)+1;
}
//判断日月食
if((lunD==1&&k==k1)||(lunD==wangD&&k==(k1+0.5))){
if(abs(sin(ac))<=0.36){
var s=5.19595-0.0048*cos(aa)+0.002*cos(2*aa)-0.3283*cos(ab)-0.006*cos(aa+ab)+0.0041*cos(aa-ab);
var r=0.207*sin(aa)+0.0024*sin(2*aa)-0.039*sin(ab)+0.0115*sin(2*ab)-0.0073*sin(aa+ab)-0.0067*sin(aa-ab)+0.0117*sin(2*ac);
var p=abs(s*sin(ac)+r*cos(ac));
var q=0.0059+0.0046*cos(aa)-0.0182*cos(ab)+0.0004*cos(2*ab)-0.0005*cos(aa+ab);
if(p-q<=1.5572){
ecli=1; //日食
if(k!=floor(k)){
if(p+q>=1.0129)
ecli=3; //月偏食
else
ecli=2; //月全食
}
}
}
}
}
//k循环结束