?? index.htm
字號:
月歷頁面生成
**********************/
function getLunar(){ //月歷頁面生成
var By = year2Ayear(Cal_y.value);
var Bm = Cal_m.value-0;
if(By == -10000) return;
if(!lun.dn || lun.y!=By || lun.m!=Bm){ //月歷未計(jì)算
lun.yueLiHTML(By,Bm,curJD);
Cal2.innerHTML = lun.pg0;
page1.innerHTML = lun.pg1;
Cal4.innerHTML = lun.pg2;
}
showMessD(-2);
}
getLunar(); //調(diào)用月歷頁面生成函數(shù)
/**********************
年歷面頁生成
**********************/
function getNianLi(dy){
y=year2Ayear(Cal_y2.value);
if(y==-10000) return;
y+=dy;
Cal_y2.value = Ayear2year(y);
if(y<-4712) { alert('到底了'); return; }
if(Cal_tg.checked) Cal7.innerHTML=Ayear2year(y)+'年<br>'+nianLiHTML(y);
else Cal7.innerHTML=Ayear2year(y)+'年<br>'+nianLi2HTML(y);
}
/**********************
時鐘1秒定時
**********************/
function tick() { //即時坐標(biāo)計(jì)算
var now = new Date();
show_clock(now);
zb_calc();
window.setTimeout("tick()", 1000);
}
tick(); //觸發(fā)時鐘
</script>
<!--
以下部分是工具函數(shù)等與日歷無直接關(guān)系,如果不需要可以刪除
1、測試工具
2、說明書
-->
<script language=javascript>
function K_getJD(){
JD.Y = Iy.value-0;
JD.M = Im.value-0;
JD.D = Id.value-0;
JD.h = Ih.value-0;
JD.m = Ii.value-0;
JD.s = Is.value-0;
return JD.toJD();
}
function testDD(UT){ //坐標(biāo)測試
var s="",T,T2,dt;
T=(K_getJD()-J2000); //力學(xué)時
if(UT){
T += JD.deltatT2(T)-8/24;
}
z=new Array(),z2=new Array(); //坐標(biāo)數(shù)組
msc.calc(T,I_dlLon.value/180*Math.PI,I_dlLat.value/180*Math.PI,0); //坐標(biāo)測試
s += msc.toHTML(1);
//月球迭代算法測試
L =XL.M_Lon(T/36525,-1); //正算
T2=XL.M_Lon_t(L)*36525; //反算
dt=(T2-T)*86400;
s += "<b>月球迭代算法測試:</b><br>";
s += "高速迭代法求指定Date平分點(diǎn)黃經(jīng)的發(fā)生時刻。測試如下:<br>";
s += "輸入時間(日數(shù)):" + T + "<br>";
s += "月球黃經(jīng)(弧度):" + L + "<br>";
s += "反算時間(日數(shù)):" + T2 + "<br>";
s += "迭代誤差(秒):" +dt +"<br><br>";
//地球迭代算法測試
L=XL.E_Lon(T/36525,-1);
T2=XL.E_Lon_t(L)*36525;
dt=(T2-T)*86400;
s += "<b>地球迭代算法測試:</b><br>";
s += "輸入時間(日數(shù)):"+T+"<br>";
s += "地球黃經(jīng)(弧度):"+L+"<br>";
s += "反算時間(日數(shù)):"+T2+"<br>";
s += "迭代誤差(秒):"+dt+"<br><br>";
L=XL.MS_aLon(T/36525,-1,60); //-1表示月球序列全部計(jì)算,60表示地球序列只算60項(xiàng)就可以了
T2=XL.MS_aLon_t(L)*36525;
dt=(T2-T)*86400;
s += "月日黃經(jīng)差返算迭代的時間誤差(秒):" + dt + "<br><br>";
out.innerHTML=s;
}
function szj(){
SZJ.L = I_dlLon.value/180*Math.PI; //設(shè)置站點(diǎn)參數(shù)
SZJ.fa = I_dlLat.value/180*Math.PI;
var d0 = int2(K_getJD()+0.5);
var s="", r;
r=SZJ.St(d0-J2000-8/24);
JD.setFromJD(r.s+J2000+8/24); s +="太陽升起 " + JD.toStr()+"<br>";
JD.setFromJD(r.z+J2000+8/24); s +="太陽中天 " + JD.toStr()+"<br>";
JD.setFromJD(r.j+J2000+8/24); s +="太陽降落 " + JD.toStr()+"<br>";
JD.setFromJD(r.c+J2000+8/24); s +="民用天亮 " + JD.toStr()+"<br>";
JD.setFromJD(r.h+J2000+8/24); s +="民用天黑 " + JD.toStr()+"<br>";
s +="白天長度 " + (r.h-r.c)*24 + "小時<br>";
r=SZJ.Mt(d0-J2000-8/24);
JD.setFromJD(r.s+J2000+8/24); s +="月亮升起 " + JD.toStr()+"<br>";
JD.setFromJD(r.z+J2000+8/24); s +="月亮中天 " + JD.toStr()+"<br>";
JD.setFromJD(r.j+J2000+8/24); s +="月亮降落 " + JD.toStr()+"<br>";
out.innerHTML=s;
}
function dingQi_cmp(){ //定氣誤差測試
var i,T,maxT=0;
var y=year.value-2000;
var N=testN.value-0;
for(i=0;i<N;i++){
W = (y+i/24)*2*Math.PI;
T= XL.S_aLon_t2( W ) - XL.S_aLon_t( W ); //節(jié)氣粗算與精算的差異
T = int2( Math.abs(T*36525*86400) );
if( T>maxT ) maxT=T;
}
out.innerHTML = (2000+y)+"年之后"+N+"個節(jié)氣粗算與精算的最大差異:"+maxT+"秒。";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingSuo_cmp(){ //定朔測試函數(shù)
var i,T,maxT=0;
var y=year.value-2000;
var N=testN.value-0;
var n=int2(y*(365.2422/29.53058886)); //截止當(dāng)年首經(jīng)歷朔望的個數(shù)
for(i=0;i<N;i++){
W = (n+i/24)*2*Math.PI;
T= XL.MS_aLon_t2( W ) - XL.MS_aLon_t( W ); //合塑粗算與精算的差異
T = int2( Math.abs(T*36525*86400) );
if( T>maxT ) maxT=T;
}
out.innerHTML = (2000+y)+"年之后"+N+"個朔日粗算與精算的最大差異:"+maxT+"秒。";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingQi_v(){ //定氣計(jì)算速度測試
var d1=new Date(); for(i=0;i<1000;i++) XL.S_aLon_t(0);
var d2=new Date(); for(i=0;i<1000;i++) XL.S_aLon_t2(0);
var d3=new Date();
out.innerHTML = "高精度:"+(d2-d1)+"毫秒/千個<br>"
+ "低精度:"+(d3-d2)+"毫秒/千個<br>";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function dingSuo_v(){ //定朔計(jì)算速度測試
var d1=new Date(); for(i=0;i<1000;i++) XL.MS_aLon_t(0);
var d2=new Date(); for(i=0;i<1000;i++) XL.MS_aLon_t2(0);
var d3=new Date();
out.innerHTML = "高精度:"+(d2-d1)+"毫秒/千個<br>"
+ "低精度:"+(d3-d2)+"毫秒/千個<br>";
out.innerHTML = '<font color=red>' + out.innerHTML + '</font>';
}
function getLunar2(){ //年歷生成
var k, y=year.value-0, n=testN.value-0, s='紅色表示定氣或定朔與實(shí)歷不同<br>';
var s1,s2;
var d1 = new Date();
for(k=0;k<n;k++) s += (y+k)+'年<br>'+nianLiHTML(y+k)+'<br>';
var d2 = new Date();
out.innerHTML='計(jì)算'+n+'年日歷總用時:'+(d2-d1)+'毫秒。<br>'+s;
}
function dingSuo(jiao){ //定朔測試函數(shù)
if(jiao==-1) jiao=prompt("請輸入角度(0朔,90上弦,180望,270下弦,或其它):",0)-0;
var i,n,T,s="月-日黃經(jīng)差"+jiao+"<br>", s2="";
var y=year.value-2000;
var N=testN.value-0;
for(i=0;i<N;i++){
n=int2(y*(365.2422/29.53058886)); //截止當(dāng)年首經(jīng)歷朔望的個數(shù)
T=XL.MS_aLon_t( (n+i+jiao/360)*2*Math.PI ); //精確時間計(jì)算,入口參數(shù)是當(dāng)年各朔望黃經(jīng)
JD.setFromJD(T*36525+J2000+8/24-JD.deltatT2(T*36525)); //力學(xué)時轉(zhuǎn)為協(xié)調(diào)世時,式中8/24是時區(qū)
s2+=JD.toStr()+"<br>"; //日期轉(zhuǎn)為字串
if(i%50==0) s+=s2,s2="";
}
out.innerHTML=s+s2;
}
function dingQi(){ //定氣測試函數(shù)
var i,T,s="",s2="";
var y=year.value-2000;
var N=testN.value-0;
for(i=0;i<N;i++){
T = XL.S_aLon_t( (y+i/24)*2*Math.PI ); //精確節(jié)氣時間計(jì)算
JD.setFromJD(T*36525+J2000+8/24-JD.deltatT2(T*36525)); //力學(xué)時轉(zhuǎn)為協(xié)調(diào)世時,式中8/24是時區(qū)
s2+="視黃經(jīng)"+(i/24)*360+":"+JD.toStr()+"<br>"; //日期轉(zhuǎn)為字串
if(i%50==0) s+=s2,s2="";
}
out.innerHTML=s+s2;
}
function K_show(f){
pan_1.style.display='none';
pan_2.style.display='none';
if(f==1) pan_1.style.display='block';
if(f==2) pan_2.style.display='block';
out.innerHTML='';
}
</script>
<br>
<table width=770 border=0 cellpadding=3 cellspacing=0>
<tr><td align=center>
[<a href="javascript:dingQi_v();">定氣速度測試</a> <a href="javascript:dingSuo_v();">定朔速度測試</a>]
[<a href='javascript:K_show(1)'>氣朔計(jì)算</a> <a href='javascript:K_show(2)'>坐標(biāo)計(jì)算</a> <a href='javascript:K_show(0)'>清空</a>]
</td></tr>
<tr><td>
<div id=pan_1 style='display:none'>
年首 <input type=text size=4 id=year value=2000>
個數(shù) <input type=text size=3 id=testN value=10>
<input type=button value=定朔 onclick=dingSuo(0)>
<input type=button value=定望 onclick=dingSuo(180)>
<input type=button value=定氣 onclick=dingQi()>
<input type=button value=任意月相 onclick=dingSuo(-1)>
<input type=button value=粗定氣誤差 onclick=dingQi_cmp()>
<input type=button value=粗定朔誤差 onclick=dingSuo_cmp()>
<input type=button value=精算年歷 onclick=getLunar2()>
</div>
<div id=pan_2 style='display:none'>
<input type=text size=5 id=Iy value=2008>年
<input type=text size=2 id=Im value=1>月
<input type=text size=2 id=Id value=1>日
<input type=text size=2 id=Ih value=0>時
<input type=text size=2 id=Ii value=0>分
<input type=text size=2 id=Is value=0>秒
<a href="javascript:testDD(0);">坐標(biāo)計(jì)算(TD)</a>
<a href="javascript:testDD(1);">坐標(biāo)計(jì)算(UT)</a>
地理經(jīng)度:<input type=text size=8 id=I_dlLon value="-116.383">
地理緯度:<input type=text size=6 id=I_dlLat value="39.9">
<a href="javascript:szj()">日月升降(UT)</a>
</div>
</td></tr>
<tr><td><div id=out></div></td></tr>
</table>
</center>
</body></html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -