📄 index.htm
字号:
//数据显示
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='地名 初亏 食甚 复圆 食既 生光\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; //转为UTC(本地时间)
ou+=' '+JD.setFromJD_str(t).substr(12,8);
}
ou += '\r\n';
}
Cc_tb.innerText=ou;
}
//==========================
//页面生成有关的函数
//==========================
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'; //地方日食
}
/********************
当前时间初始化,在屏幕上显示时间、保存本地时区信息等
*********************/
function set_date_screen(){ //把当前时间置于屏幕的便入框之中
var now=new Date();
curTZ = now.getTimezoneOffset()/60; //时区 -8为北京时
curJD = now/86400000-10957.5 - curTZ/24; //J2000起算的儒略日数(当前本地时间)
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(){ //国家或地区改变
var i,v = Sel_dq.options[Sel_dq.selectedIndex].value;
v = v.split('#');
Sel_dq.v = v[0]; //地区时差
Sel_dq.rg= v[1]; //日光节约参数
Sel_sqsm.innerHTML=v[2]; //时区说明
}
function change_zhou(){ //洲别改变
var i, ob = SQv[ Sel_zhou.options[Sel_zhou.selectedIndex].value-0 ]; //某洲数组
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起算的儒略日数(当地时间)
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同步,秒数取整而不四舍五入
}
/****************
地理经纬度选择的页面控制函数
****************/
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 = '经度(向西为正) '+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();
/**********************
月历的年、月跳转控制函数
**********************/
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>[日标]:</b></font>'+'公历 '+Cml_y.value+'-'+Cml_m.value+'-'+Cml_d.value + ' 儒略日数 ' + 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>[纪时]:</b></font><i>' + ob.bz_JS + '</i><br>'
+ '<font color=green><b>[时标]:</b></font><i>' + '23 01 03 05 07 09 11 13 15 17 19 21 23';
}
ML_calc(); //在时间、地标初始化完成后就可执行
/**********************
月历的年、月跳转控制函数
**********************/
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();
}
/********************
即时坐标计算等
*********************/
function zb_calc(){
if(Cal_pause.checked) return;
var now = new Date();
var jd = now/86400000-10957.5; //J2000起算的儒略日数
jd += JD.deltatT2(jd);
msc.calc(jd, Sel2.vJ-0, Sel2.vW-0,0); //传入力学时间(J2000.0起算)
Cal_zb.innerHTML = msc.toHTML(0);
}
function RTS1(jd,vJ,vW,tz){
SZJ.calcRTS(jd, 1, vJ, vW, tz); //升降计算,使用北时时间,tz=-8指东8区,jd+tz应在当地正午左右(误差数小时不要紧)
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日的摘要信息。调用前应先执月历页面生成,产生有效的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){ //鼠标移出日期上方
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'){ //鼠标移过日期上方
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 );
}
}
/**********************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -