⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index.htm

📁 寿星万年历 基于天文算法的万年历 javascript 年代范围大 精度高
💻 HTM
📖 第 1 页 / 共 3 页
字号:
月历页面生成
**********************/
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){  //月历未计算
   lun.yueLiHTML(By,Bm,curJD);
   Cal2.innerHTML = lun.pg0;
   page1.innerHTML = lun.pg1;
   Cal4.innerHTML = lun.pg2;
  }

  showMessD(-2);
}

getLunar(); //调用月历页面生成函数

/**********************
年历面页生成
**********************/
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() { //即时坐标计算
  var now = new Date();
  show_clock(now);
  zb_calc();
  window.setTimeout("tick()", 1000);
}
tick(); //触发时钟



</script>





<!--
 以下部分是工具函数等与日历无直接关系,如果不需要可以删除
 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){ //坐标测试
 var s="",T,T2,dt;
 T=(K_getJD()-J2000);  //力学时
 if(UT){
   T += JD.deltatT2(T)-8/24;
 }

 z=new Array(),z2=new Array(); //坐标数组

 msc.calc(T,I_dlLon.value/180*Math.PI,I_dlLat.value/180*Math.PI,0); //坐标测试
 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平分点黄经的发生时刻。测试如下:<br>";
 s += "输入时间(日数):" + T + "<br>";
 s += "月球黄经(弧度):" + L + "<br>";
 s += "反算时间(日数):" + 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 += "输入时间(日数):"+T+"<br>";
 s += "地球黄经(弧度):"+L+"<br>";
 s += "反算时间(日数):"+T2+"<br>";
 s += "迭代误差(秒):"+dt+"<br><br>";

 L=XL.MS_aLon(T/36525,-1,60); //-1表示月球序列全部计算,60表示地球序列只算60项就可以了
 T2=XL.MS_aLon_t(L)*36525;
 dt=(T2-T)*86400;
 s += "月日黄经差返算迭代的时间误差(秒):" + dt + "<br><br>";

 out.innerHTML=s;
}

function szj(){
  SZJ.L  = I_dlLon.value/180*Math.PI; //设置站点参数
  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 ); //节气粗算与精算的差异
  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 dingSuo_cmp(){ //定朔测试函数
 var i,T,maxT=0;
 var y=year.value-2000;
 var N=testN.value-0;
 var n=int2(y*(365.2422/29.53058886)); //截止当年首经历朔望的个数
 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(){ //定气计算速度测试
 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(){ //定朔计算速度测试
 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='红色表示定气或定朔与实历不同<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='计算'+n+'年日历总用时:'+(d2-d1)+'毫秒。<br>'+s;
}


function dingSuo(jiao){ //定朔测试函数
 if(jiao==-1) jiao=prompt("请输入角度(0朔,90上弦,180望,270下弦,或其它):",0)-0;
 var i,n,T,s="月-日黄经差"+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)); //截止当年首经历朔望的个数
  T=XL.MS_aLon_t( (n+i+jiao/360)*2*Math.PI );  //精确时间计算,入口参数是当年各朔望黄经
  JD.setFromJD(T*36525+J2000+8/24-JD.deltatT2(T*36525));     //力学时转为协调世时,式中8/24是时区
  s2+=JD.toStr()+"<br>";                  //日期转为字串
  if(i%50==0) s+=s2,s2="";
 }
 out.innerHTML=s+s2;
}
function dingQi(){ //定气测试函数
 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 );    //精确节气时间计算
  JD.setFromJD(T*36525+J2000+8/24-JD.deltatT2(T*36525));       //力学时转为协调世时,式中8/24是时区
  s2+="视黄经"+(i/24)*360+":"+JD.toStr()+"<br>";  //日期转为字串
  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)'>气朔计算</a> <a href='javascript:K_show(2)'>坐标计算</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>
 个数 <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);">坐标计算(TD)</a>
 <a href="javascript:testDD(1);">坐标计算(UT)</a>
 地理经度:<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>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -