?? index.htm
字號:
//數(shù)據(jù)顯示
Cb_zb.innerHTML = s;
Cal_zb.innerHTML=msc.toHTML(1);
}
function tu_cls_path(){
tu1.init(Can1);
tu1.mark.p_cls();
tu1.mark.p_save();
}
function dfRS(ly){ //地方日食表生成
var jd = JD.JD( year2Ayear(Cc_y.value), Cc_m.value-0, (Cc_d.value-0) ) - J2000; //取屏幕時間
if(ly==1) jd -=29.53;
if(ly==2) jd +=29.53;
if(ly==1||ly==2) jd = XL.MS_aLon_t2( Math.floor((jd+8)/29.5306)*pi2 )*36525 - curTZ/24 -JD.deltatT2(jd);
//置時間
var ts=JD.setFromJD_str(jd+J2000);
Cc_y.value = ts.substr(0,5)-0;
Cc_m.value = ts.substr(6,2);
Cc_d.value = ts.substr(9,2);
var i,j,t,c, ou='地名 初虧 食甚 復(fù)圓 食既 生光\r\n', s=Cc_db.innerText;
s=s.replace(/\r\n/g,'#'); s=s.replace(/ /g,''); s=s.split('#');
for(i=0;i<s.length;i++){
c=s[i]; if(c.length==0||c.substr(0,1)=='*') continue;
c=c.split(','); if(c.length<=3) continue;
rsPL.secMax(jd,(c[2]-0)/180*Math.PI,(c[1]-0)/180*Math.PI,(c[3]-0)/1000);
ou += c[0]+'['+rsPL.LX+']';
for(j=0;j<5;j++){
t = rsPL.sT[j]; if(!t) continue;
t -= curTZ/24+JD.deltatT2(t)+J2000; //轉(zhuǎn)為UTC(本地時間)
ou+=' '+JD.setFromJD_str(t).substr(12,8);
}
ou += '\r\n';
}
Cc_tb.innerText=ou;
}
//==========================
//頁面生成有關(guān)的函數(shù)
//==========================
function showPage(pg){
Cal_pause.checked=true;
page1.style.display='none';
page2.style.display='none';
page3.style.display='none';
page4.style.display='none';
if(pg==1){page1.style.display='block'; Cal_pause.checked=false;}
if(pg==2) page2.style.display='block';
if(pg==3){page3.style.display='block'; tu_calc(0,0);} //圖表
if(pg==4) page4.style.display='block'; //地方日食
}
/********************
當(dāng)前時間初始化,在屏幕上顯示時間、保存本地時區(qū)信息等
*********************/
function set_date_screen(){ //把當(dāng)前時間置于屏幕的便入框之中
var now=new Date();
curTZ = now.getTimezoneOffset()/60; //時區(qū) -8為北京時
curJD = now/86400000-10957.5 - curTZ/24; //J2000起算的儒略日數(shù)(當(dāng)前本地時間)
JD.setFromJD(curJD+J2000);
Cml_y.value = JD.Y;
Cml_m.value = JD.M;
Cml_d.value = JD.D;
Cml_his.value = JD.h+':'+JD.m+':'+JD.s.toFixed(0);
Cal_y.value = JD.Y;
Cal_m.value = JD.M;
curJD=int2(curJD+0.5);
}
set_date_screen();
/****************
外地時間選擇
****************/
function change_dq(){ //國家或地區(qū)改變
var i,v = Sel_dq.options[Sel_dq.selectedIndex].value;
v = v.split('#');
Sel_dq.v = v[0]; //地區(qū)時差
Sel_dq.rg= v[1]; //日光節(jié)約參數(shù)
Sel_sqsm.innerHTML=v[2]; //時區(qū)說明
}
function change_zhou(){ //洲別改變
var i, ob = SQv[ Sel_zhou.options[Sel_zhou.selectedIndex].value-0 ]; //某洲數(shù)組
Sel_dq.length=0;
for(i=1; i<ob.length; i+=2) addOp(Sel_dq,ob[i+1],ob[i]);
change_dq();
}
for(i=0;i<SQv.length;i++) addOp(document.all.Sel_zhou,i,SQv[i][0]);
change_zhou();
function show_clock(t){ //顯示時鐘,傳入日期對象
var h = Sel_dq.v-0, rg='';
var v = Sel_dq.rg;
var jd = t/86400000-10957.5 + h/24; //J2000起算的儒略日數(shù)(當(dāng)?shù)貢r間)
Clock1.innerHTML = t.toLocaleString();
if(v){
var y1 = JD.Y, y2=y1; //該時所在年份
var m1 = v.substr(0,2)-0, m2 = v.substr(5,2)-0;
if(m2<m1) y2++;
//nnweek(y,m,n,w)求y年m月第n個星期w的jd
var J1 = JD.nnweek( y1, m1, v.substr(2,1), v.substr(3,1)-0 )-0.5-J2000 +(v.charCodeAt(4)-97)/24;
var J2 = JD.nnweek( y2, m2, v.substr(7,1), v.substr(8,1)-0 )-0.5-J2000 +(v.charCodeAt(9)-97)/24;
if(jd>=J1 && jd<J2) jd+=1/24, rg='<font color=red>¤</font>'; //夏令時
}
JD.setFromJD(jd+J2000);
Clock2.innerHTML = JD.D+'日 '+JD.h+':'+JD.m+':'+int2(JD.s) + rg; //與了與clock1同步,秒數(shù)取整而不四舍五入
}
/****************
地理經(jīng)緯度選擇的頁面控制函數(shù)
****************/
function change2(){
var i,v = new JWdecode( Sel2.options[Sel2.selectedIndex].value );
Sel2.vJ = v.J; Sel2.vW = v.W;
Cb_J.value=(v.J/Math.PI*180).toFixed(6), Cb_W.value=(v.W/Math.PI*180).toFixed(6);
Cal_zdzb.innerHTML = '經(jīng)度(向西為正) '+rad2str2(v.J) + ' 緯度 '+rad2str2(v.W);
showMessD(-2);
setCookie('Sel1',Sel1.selectedIndex);
setCookie('Sel2',Sel2.selectedIndex);
}
function change(){
Sel2.length=0;
var i, ob=JWv[ Sel1.options[Sel1.selectedIndex].value-0 ];
for(i=1; i<ob.length; i++)
addOp( Sel2, ob[i].substr(0,4), ob[i].substr(4,ob[i].length-4) );
change2();
}
var i;
for(i=0;i<JWv.length;i++) addOp(document.all.Sel1,i,JWv[i][0]);
var seI1=getCookie('Sel1');
var seI2=getCookie('Sel2');
Sel1.selectedIndex = seI1; change();
Sel2.selectedIndex = seI2; change2();
/**********************
月歷的年、月跳轉(zhuǎn)控制函數(shù)
**********************/
function ML_calc(){
var ob=new Object();
var t = timeStr2hour(Cml_his.value);
var jd=JD.JD(year2Ayear(Cml_y.value), Cml_m.value-0, Cml_d.value-0+t/24)
obb.mingLiBaZi( jd+curTZ/24-J2000, Sel2.vJ, ob ); //八字計算
Cal6.innerHTML =
'<font color=red> <b>[日標(biāo)]:</b></font>'+'公歷 '+Cml_y.value+'-'+Cml_m.value+'-'+Cml_d.value + ' 儒略日數(shù) ' + int2(jd+0.5) + ' 距2000年首' + int2(jd+0.5-J2000) + '日<br>'
+ '<font color=red ><b>[八字]:</b></font>' + ob.bz_jn+'年 '+ob.bz_jy+'月 '+ob.bz_jr+'日 '+ob.bz_js+'時 真太陽 <font color=red>' + ob.bz_zty+ '</font><br>'
+ '<font color=green><b>[紀(jì)時]:</b></font><i>' + ob.bz_JS + '</i><br>'
+ '<font color=green><b>[時標(biāo)]:</b></font><i>' + '23 01 03 05 07 09 11 13 15 17 19 21 23';
}
ML_calc(); //在時間、地標(biāo)初始化完成后就可執(zhí)行
/**********************
月歷的年、月跳轉(zhuǎn)控制函數(shù)
**********************/
function changeYear(ud){ //跳到上(或下)一年
var y = year2Ayear(Cal_y.value);
if(y==-10000) return;
if(ud==0){
if(y<=-4712) { alert('到頂了!'); return; }
Cal_y.value = Ayear2year(y-1);
}else{
if(y>=9999) { alert('到頂了!'); return; }
Cal_y.value = Ayear2year(y+1);
}
getLunar();
}
function changeMonth(ud){ //跳到上(或下)下月
var y,m;
y = year2Ayear(Cal_y.value);
m = Cal_m.value-0;
if(ud==0){
if(m<=1 && y<=-4712) { alert('到頂了!'); return; }
if(m<=1) Cal_m.value = 12, Cal_y.value = Ayear2year(y-1);
else Cal_m.value = m-1;
}
if(ud==1){
if(m>=12 && y>=9999) { alert('到頂了!'); return; }
if(m>=12) Cal_m.value = 1, Cal_y.value = Ayear2year(y+1);
else Cal_m.value = m+1;
}
if(ud==2) { set_date_screen(); ML_calc(); }
getLunar();
}
/********************
即時坐標(biāo)計算等
*********************/
function zb_calc(){
if(Cal_pause.checked) return;
var now = new Date();
var jd = now/86400000-10957.5; //J2000起算的儒略日數(shù)
jd += JD.deltatT2(jd);
msc.calc(jd, Sel2.vJ-0, Sel2.vW-0,0); //傳入力學(xué)時間(J2000.0起算)
Cal_zb.innerHTML = msc.toHTML(0);
}
function RTS1(jd,vJ,vW,tz){
SZJ.calcRTS(jd, 1, vJ, vW, tz); //升降計算,使用北時時間,tz=-8指東8區(qū),jd+tz應(yīng)在當(dāng)?shù)卣缱笥?誤差數(shù)小時不要緊)
var s, ob = SZJ.rts[0];
JD.setFromJD(jd+J2000);
s = '日出 <font color=red>'+ob.s + '</font> 日落 '+ob.j +' 中天 '+ob.z +'<br>';
s += '月出 '+ob.Ms+ ' 月落 '+ob.Mj+' 月中 '+ob.Mz+'<br>';
s += '晨起天亮 '+ob.c + ' 晚上天黑 '+ob.h +'<br>';
s += '日照時間 '+ob.sj+ ' 白天時間 '+ob.ch+'<br>';
return s;
}
/**********************
日歷(某日)信息頁面生成
**********************/
function showMessD(n){ //顯時本月第n日的摘要信息。調(diào)用前應(yīng)先執(zhí)月歷頁面生成,產(chǎn)生有效的lun對象
if(event){ if(event.ctrlKey) return; }
if(!lun.dn||n>=lun.dn) return;
var vJ = Sel2.vJ-0, vW = Sel2.vW-0;
if(n==-1){ //鼠標(biāo)移出日期上方
Cal_pan.style.display = 'none';
Cal5.innerHTML = Cal5.bak;
}
if(n==-2) Cal5.bak = Cal5.innerHTML = RTS1(curJD, vJ, vW, curTZ);
if(n<0) return;
//顯示n指定的日期信息
var ob = lun.lun[n];
Cal5.innerHTML = RTS1(ob.d0, vJ, vW, curTZ);
if(window.event && window.event.srcElement.tagName=='SPAN'){ //鼠標(biāo)移過日期上方
s = Ayear2year(ob.y) + '年' + ob.m + '月' + ob.d + '日<br>'
s += '星期' + JD.Weeks[ob.week] + ' ' + ob.XiZ +'<br>';
s += ob.Lyear3+'年 '+ob.Lleap + ob.Lmc + '月' + (ob.Ldn>29?'大 ':'小 ') + ob.Ldc + '日<br>';
s += ob.Lyear2+'年 '+ob.Lmonth2+'月 '+ob.Lday2+'日<br>';
s += '回歷['+ob.Hyear+'年'+ob.Hmonth+'月'+ob.Hday+'日]<br>';
if(ob.yxmc) s += ob.yxmc+' '+ob.yxsj+' ';
if(ob.jqmc) s += '定'+ob.jqmc+' '+ob.jqsj+'<br>';
else { if(ob.Ljq) s += ob.Ljq+'<br>';}
if(ob.A) s += ob.A +' ';
if(ob.B) s += ob.B +' ';
if(ob.C) s += ob.C;
Cal_pan.style.display = 'block'; //先顯示再傳值屏幕流暢
Cal_pan_in.innerHTML = s;
Cal_pan.style.left = window.event.x+document.body.scrollLeft + ( (ob.week>3) ? -180 : 20 );
Cal_pan.style.top = window.event.y+document.body.scrollTop - ( (ob.weeki<2)? 0 :100 );
}
}
/**********************
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -