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

📄 index.htm

📁 返回 第一章 关于寿星万年历 第二章 公历与儒略日 第三章 回历计算 第四章 天文坐标 第五章 近现代农历的天文学性质及其规则 第六章 离散序列的直线拟合算法
💻 HTM
📖 第 1 页 / 共 2 页
字号:
 if(bak){
   Cal5.bak=Cal5.innerHTML;
   Cal6.bak=Cal6.innerHTML;
 }
}

function strTu(s,n){ //截串
  s = trim(s);
  if(s.length>n+1) return s.substr(0,n)+'..';
  return s;
}


function getLunar(){ //月历页面生成
  var i,j, c,c2, cr="",isM;
  var lun = Lunar.lun, ob; //日历物件
  var By  = get_year_screen(Cal_y.value);
  var Bm  = Cal_m.value-0;

  if(By == -10000) return;

  Lunar.calc2(By,Bm,1);    //农历计算
  //年份处理
  Cal2.innerHTML = lun.nianhao.nh+' 农历'+lun.Ly+'年【'+lun.ShX+'年】'; //干支纪年
  //月历处理
  var ta0='';
  for(i=0;i<lun.dn;i++){ //遍历本月各日(公历)
    //生成i日的日历页面
    ob = lun[i];
    if(!i){ for(j=0;j<lun.w0;j++) cr+='<td></td>'; } //首行前面的空单元格

    c = '', isM = ''; //文字格式控制项
    if(ob.Ljq) c += '<font color=blue>'+ob.Ljq+'</font>'; //取节气
    if(ob.A)   c += '<font color=red>' +strTu(ob.A,4)+'</font>';
    if(!c && ob.B)   c = '<font color=blue>'+strTu(ob.B,4)+'</font>';
    if(!c && ob.Ldc=="初一") c = ob.Lleap + ob.Lmc +'月'+ (ob.Ldn==30?'大':'小'); //农历历月(闰月及大小等)
    if(!c) c = ob.Ldc; //取农历日名称

    if(ob.yxmc=="朔") isM = '<font color=#808000>●</font>'; //取月相
    if(ob.yxmc=="望") isM = '<font color=#F0B000>●</font>'; //取月相
    if(ob.jqmc) isM += '<font color=#00C000>◆</font>'; //定气标记

    if(ob.Fjia) c2 = 'class=da2'; else c2 = 'class=da'; //节日置红色
    c2 += ' onmouseover="showMessD('+i+',0)"';
    c2 += ' onmouseout ="showMessD(-1,0)"';
    c2 = '<span ' + c2 + '>' +ob.d + '</span>'; //公历的日名称

    if(nowY==By && nowM==Bm && nowD==ob.d){
      c2='<span class=cur>'+c2+'</span>'; //今日标识
      showMessD(i,1);
    }


    cr += '<td class=body width="14%">'+c2+'<br>'+isM+c+'</td>';
    if(i==lun.dn-1) { for(j=0;j<6-ob.week;j++) cr+='<td></td>'; } //末行后面的空单元格
    if(i==lun.dn-1||ob.week==6) ta0+='<tr>'+cr+'</tr>', cr="";
  }
  Cal3.innerHTML='<table border=0 cellpadding=3 cellspacing=2 width="100%">'+ta0+'</table>';

  var b1='<b>月首:</b>',b2='<b>朔望:</b>',b3='<b>弦月:</b>',b4='<b>定气:</b>';
  for(i=0;i<Lunar.lun.dn;i++){
    ob=Lunar.lun[i];
    c = i+1; if(c<10) c='&nbsp;'+c;
    if(ob.Ldc =='初一') b1 += c +'日 '+ob.Lleap+ob.Lmc+'月' + (ob.Ldn==30?'大':'小')+' &nbsp;';
    if(ob.yxmc=='朔'  ||ob.yxmc=="望"  ) b2 += c +'日 ' + ob.yxsj + ob.yxmc + '月 &nbsp;';
    if(ob.yxmc=='上弦'||ob.yxmc=="下弦") b3 += c +'日 ' + ob.yxsj + ob.yxmc + ' &nbsp;';
    if(ob.jqmc) b4 += c +'日 ' + ob.jqsj + ob.jqmc + ' &nbsp;';
  }
  Cal4.innerHTML=b1+'<br>'+b2+'<br>'+b3+'<br>'+b4;
  //以下显示背景年月
  YMBG.innerHTML=Lunar.lun.y+'<br>'+monthName[Lunar.lun.m-1];
  YMBG.style.left = getLeft(Cal3)+70;
  YMBG.style.top  = getTop(Cal3) -40;
}

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

/**********************
年历生成
**********************/
function getNianli(fs){
 var y=get_year_screen(Cal_y.value);
 if(fs==1) Cal3.innerHTML=nianLiHTML(y);
 if(fs==2) Cal3.innerHTML=nianLi2HTML(y);
}
/**********************
月历的年、月跳转控制函数
**********************/

function changeYear(ud){ //跳到上(或下)一年
 var y = get_year_screen(Cal_y.value);
 if(y==-10000) return;
 if(ud==0){
   if(y<=-4712) { alert('到顶了!'); return; }
   Cal_y.value = set_year_screen(y-1);
 }else{
   if(y>=9999) { alert('到顶了!'); return; }
   Cal_y.value = set_year_screen(y+1);
 }
 getLunar();
}
function changeMonth(ud){ //跳到上(或下)下月
 var y,m;
 y = get_year_screen(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 = set_year_screen(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 = set_year_screen(y+1);
   else      Cal_m.value = m+1;
 }
 if(ud==2){
  Cal_y.value = nowY;
  Cal_m.value = nowM;
 }
 getLunar();
}



function zb_calc2() { //手动坐标计算
  var ct=Cal_T.value;
  if(ct.length!=20) {alert('时间串的长度不正确'); return;}
  JD.Y=ct.substr(0,5)-0;
  JD.M=ct.substr(6,2)-0;
  JD.D=ct.substr(9,2)-0;
  JD.h=ct.substr(12,2)-0;
  JD.m=ct.substr(15,2)-0;
  JD.s=ct.substr(18,2)-0;
  ct=JD.toJD()-J2000;
  Cal_zb.innerHTML = zb_calc(ct, Sel2.vJ-0, Sel2.vW-0); //传入UT时间(J2000.0起算)
}

function tick() { //即时坐标计算
  var now = new Date();
  var jd = now/86400000-10957.5; //J2000起算的儒略日数
  Clock1.innerHTML = now.toLocaleString();
  change_dq_time(jd);
  if(!Cal_pause.checked){
   var dt = JD.deltatT2(jd);  //TD-UT
   var ct = jd+dt;
   JD.setFromJD(ct+J2000);
   Cal_T.value = JD.toStr();
   Cal_zb.innerHTML = zb_calc(ct, Sel2.vJ-0, Sel2.vW-0); //传入力学时间(J2000.0起算)
  }
  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(); //坐标数组

 s += zb_calc(T,I_dlLon.value-0,I_dlLat.value-0); //坐标测试

 //月球迭代算法测试
 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 += 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));     //力学时转为协调世时,式中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));       //力学时转为协调世时,式中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  class=body2 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  class=body2>
<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 class=body2><div id=out></div></td></tr>
</table>


</center>
</body></html>

⌨️ 快捷键说明

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