📄 sxwnl.htm
字号:
<html>
<head>
<TITLE>寿星万年历2008版(V3.05)</TITLE>
<META content="寿星万年历;万年历;农历;农历计算;算法;天文算法;伊斯兰历;回历;节气;交节时刻" name=keywords>
<style>
td.body2{font-family: 宋体;font-size: 12px}
td.head {text-align: center; background-color: #F0F0F0; color: #000000; font-size: 14px; font-weight: bold}
td.body {font-family: 宋体; text-align: center;font-size: 12px}
span.da {font-family: Arial Black; text-align: center;font-size: 24px}
span.da2{font-family: Arial Black; text-align: center;font-size: 24px;color: #FF0000}
span.cur{background-color:#90D050}
</style>
<script language=javascript>
/****************************************
以下是天文计算部分,包含有:
常数 rad : 每弧度的角秒数
常数 J2000 : 2000年1月1日 12:00:00 的儒略日数
常数 pi2 : 圆周率的2倍,即2*3.14159...
trim() : 去除字串首尾的空格
rad2str() : 弧度转为"度分秒"或"时分秒"
rad2str2() : 弧度转为"度分"
rad2mrad() : 将超出0到360度的角度转为0到360度的解度
mod2(a,b) : 临界余数(a与最近的整倍数b相差的距离)
int2(a) : 取小等于a的最大整数
物件 JD : 公历——儒略日——时间物件
物件 ZB : 坐标变换物件,包含坐标旋转、章动、日月光行差(时)、视差、大气折射、恒星时的计算
物件 XL : 日月黄道平分点坐标、视坐标、速度、已知经度反求时间等方面的计算
物件 SZJ : 用来计算日月的升起、中天、降落
注意,上述函数或物件是纯天文学的,根据实际需要组合使用可以得到所需要的各种日月坐标,计算精度及计算速度也是可以根据需要有效控制的。
*****************************************/
rad = 180*3600/Math.PI,
J2000= 2451545;
pi2 = Math.PI*2;
function trim(s){ return s.replace(/(^\s*)|(\s*$)/g, ""); }
function rad2str(d,tim){ //将弧度转为字串
//tim=0输出格式示例: -23°59' 48.23"
//tim=1输出格式示例: 18h 29m 44.52s
var s=" ";
var w1="°",w2="'",w3='"';
if(d<0) d=-d,s='-';
if(tim){ d*=12/Math.PI; w1="h ",w2="m ",w3="s"; }
else d*=180/Math.PI;
var a=Math.floor(d); d=(d-a)*60;
var b=Math.floor(d); d=(d-b)*60;
var c=Math.floor(d); d=(d-c)*100;
d=Math.floor(d+0.5);
if(d>=100) d-=100, c++;
if(c>=60) c-=60, b++;
if(b>=60) b-=60, a++;
a=" "+a, b="0"+b, c="0"+c, d="0"+d;
s+=a.substr(a.length-3,3)+w1;
s+=b.substr(b.length-2,2)+w2;
s+=c.substr(c.length-2,2)+".";
s+=d.substr(d.length-2,2)+w3;
return s;
}
function rad2str2(d){ //将弧度转为字串,精确到分
//输出格式示例: -23°59'
var s="+";
var w1="°",w2="'",w3='"';
if(d<0) d=-d,s='-';
d*=180/Math.PI;
var a=Math.floor(d);
var b=Math.floor((d-a)*60+0.5);
if(b>=60) b-=60, a++;
a=" "+a, b="0"+b;
s+=a.substr(a.length-3,3)+w1;
s+=b.substr(b.length-2,2)+w2;
return s;
}
function rad2mrad(v){ //对超过0-2PI的角度转为0-2PI
v=v % (2*Math.PI);
if(v<0) return v+2*Math.PI;
return v;
}
function mod2(a,b){ //临界余数(a与最近的整倍数b相差的距离)
var c=a/b;
c -= Math.floor(c);
if(c>0.5) c-=1;
return c*b;
}
function int2(v){ return Math.floor(v); } //取整数部分
var JD={ //日期元件
Y:2000, M:1, D:1, h:12, m:0, s:0,
dts:new Array( // TD - UT1 计算表
-4000,108371.7,-13036.80,392.000, 0.0000, -500, 17201.0, -627.82, 16.170,-0.3413,
-150, 12200.6, -346.41, 5.403,-0.1593, 150, 9113.8, -328.13, -1.647, 0.0377,
500, 5707.5, -391.41, 0.915, 0.3145, 900, 2203.4, -283.45, 13.034,-0.1778,
1300, 490.1, -57.35, 2.085,-0.0072, 1600, 120.0, -9.81, -1.532, 0.1403,
1700, 10.2, -0.91, 0.510,-0.0370, 1800, 13.4, -0.72, 0.202,-0.0193,
1830, 7.8, -1.81, 0.416,-0.0247, 1860, 8.3, -0.13, -0.406, 0.0292,
1880, -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169,-0.0135,
1920, 21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031,
1960, 33.2, 0.51, 0.231,-0.0109, 1980, 51.0, 1.29, -0.026, 0.0032,
2000, 63.87, 0.1, 0, 0, 2005),
deltatExt:function(y,jsd){ var dy=(y-1820)/100; return -20+jsd*dy*dy; }, //二次曲线外推
deltatT:function(y){ //计算世界时与原子时之差,传入年
if(y>=2005){
//sd是2005年之后几年(一值到y1年)的速度估计。
//sjd是y1年之后的加速度估计。瑞士星历表jsd=31,NASA网站jsd=32,skmap的jsd=29
var y1=2014, sd=0.4, jsd=31;
if(y<=y1) return 64.7 + (y-2005) *sd; //直线外推
var v = this.deltatExt(y,jsd); //二次曲线外推
var dv= this.deltatExt(y1,jsd) - ( 64.7+(y1-2005)*sd ); //y1年的二次外推与直线外推的差
if(y<y1+100 ) v -= dv*(y1+100-y)/100;
return v;
}
var i,d=this.dts;
for(i=0;i<d.length;i+=5) if(y<d[i+5]) break;
var t1=(y-d[i])/(d[i+5]-d[i])*10, t2=t1*t1, t3=t2*t1;
return d[i+1] +d[i+2]*t1 +d[i+3]*t2 +d[i+4]*t3;
},
deltatT2:function(t){ //传入儒略日(J2000起算),计算TD-UT(单位:日)
return this.deltatT(t/365.2425+2000)/86400.0;
},
toJD:function(){ //公历转儒略日
var y=this.Y, m=this.M, n=0; //取出年月
if(m<=2) m+=12,y--;
if(this.Y*372+this.M*31+this.D>=588829)//判断是否为格里高利历日1582*372+10*31+15
n =int2(y/100), n =2-n+int2(n/4);//加百年闰
n +=int2(365.25*(y+4716)+0.01); //加上年引起的偏移日数
n +=int2(30.6*(m+1))+this.D; //加上月引起的偏移日数及日偏移数
n +=((this.s/60+this.m)/60+this.h)/24 - 1524.5;
return n;
},
setFromJD:function(jd){ //儒略日数转公历
jd+=0.5;
var A=int2(jd), F=jd-A, D; //取得日数的整数部份A及小数部分F
if(A>=2299161) D=int2((A-1867216.25)/36524.25),A+=1+D-int2(D/4);
A +=1524; //向前移4年零2个月
this.Y =int2((A-122.1)/365.25);//年
D =A-int2(365.25*this.Y); //去除整年日数后余下日数
this.M =int2(D/30.6001); //月数
this.D =D-int2(this.M*30.6001);//去除整月日数后余下日数
this.Y-=4716; this.M--;
if(this.M>12) this.M-=12;
if(this.M<=2) this.Y++;
//日的小数转为时分秒
F*=24; this.h=int2(F); F-=this.h;
F*=60; this.m=int2(F); F-=this.m;
F*=60; this.s=F;
},
toStr:function(){ //日期转为串
var Y=" "+this.Y,M="0"+this.M, D="0"+this.D;
var h=this.h,m=this.m,s=int2(this.s+.5);
if(s>=60) s-=60,m++;
if(m>=60) m-=60,h++;
h="0"+h; m="0"+m; s="0"+s;
Y=Y.substr(Y.length-5,5); M=M.substr(M.length-2,2); D=D.substr(D.length-2,2);
h=h.substr(h.length-2,2); m=m.substr(m.length-2,2); s=s.substr(s.length-2,2);
return Y+"-"+M+"-"+D+" "+h+":"+m+":"+s;
},
setFromJD_str:function(jd){ this.setFromJD(jd); return this.toStr(); },
timeStr:function(jd){ //提取jd中的时间(去除日期)
var h,m,s;
jd+=0.5; jd = (jd - int2(jd));
jd*=24; h = int2(jd); jd-=h;
jd*=60; m = int2(jd); jd-=m;
jd*=60; s = int2(jd+0.5);
if(s>=60) s-=60,m++;
if(m>=60) m-=60,h++;
h="0"+h; m="0"+m; s="0"+s;
return h.substr(h.length-2,2)+':'+m.substr(m.length-2,2)+':'+s.substr(s.length-2,2);
}
};
var ZB={ //坐标类
llrConv:function(JW,E){ //球面坐标旋转
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -