📄 index.htm
字号:
<html>
<head>
<TITLE>寿星万年历2008版(V3.05)</TITLE>
<META content="寿星万年历;万年历;农历;农历计算;算法;天文算法;伊斯兰历;回历;节气;交节时刻" name=keywords>
<style>
td.body2{font-family: 宋体;font-size: 12px}
td.head {text-align: center; background-color: #F0F0F0; color: #000000; font-size: 14px; font-weight: bold}
td.body {font-family: 宋体; text-align: center;font-size: 12px}
span.da {font-family: Arial Black; text-align: center;font-size: 24px}
span.da2{font-family: Arial Black; text-align: center;font-size: 24px;color: #FF0000}
span.cur{background-color:#90D050}
</style>
<script language=javascript src=eph.js></script> <!--星历模块-->
<script language=javascript src=JN.js></script> <!--皇帝纪年模块-->
<script language=javascript src=JW.js></script> <!--全国城市经纬数据库-->
<script language=javascript src=lunar.js></script><!--日历物件-->
</head>
<body>
<center>
<table width=770 border=0 cellpadding=0 cellspacing=0>
<tr><td width="100%" colspan=3 class=body2><span style='font-size:16px;font-weight:bold;color:#80C000'>寿星万年历 2008版(V3.05)</span> <font color=#FFCCCC>(适用范围-4712至9999年,其中-721年以后与实历相符)</font> </td></tr>
<tr>
<td width=270 valign=top class=body2 style='line-height: 150%'>
<b>本地时间 <span id=Clock1></span></b><br>
<b>外地时间</b> <select id=Sel_dq onchange="change_dq()"></select><br><span id=Clock2></span><span id=Clock2_dq></span><hr>
省份 <select id=Sel1 onchange="change(0)" style="width:80px"></select> 市 <select id=Sel2 onchange="change2()" style="width:100px"></select><br>
站点坐标 <span id=Cal_zdzb></span>
暂停<input id=Cal_pause type=checkbox><br>
力学时<input id=Cal_T type=text value="0" size=20> <input type=button value="确定" onclick=zb_calc2()>
<div id=Cal_zb></div>
</td>
<td width=470 class=body2 valign=top>
<DIV id=YMBG style="Z-INDEX:-1; position:absolute; top:50; left:300; font-size=100pt;COLOR: #f0f0f0; font-family:Arial Black"></DIV>
<table width="100%" cellspacing=2>
<tr><td style="background-color:#0000A0" colspan=7 class=body2>
<font color=white>公元<input type=text id=Cal_y size=4 value=2008>年<input type=text maxlength=2 id=Cal_m size=2 value=1>月<input type=button value="确定" onclick=getLunar()></font>
<span id=Cal2 style="font-size:16px;color=#FFFF00;font-weight: bold"></span>
</td></tr>
<tr><td class=head width="14%">日</td><td class=head width="14%">一</td><td class=head width="14%">二</td><td class=head width="14%">三</td><td class=head width="14%">四</td><td class=head width="14%">五</td><td class=head width="14%">六</td></tr>
</table>
<div id=Cal3></div>
</td>
<td width=30 valign=top align=center class=body2><br><br><br><br>
<a href='javascript:showNH()'>年号</a><br><br>
年<br><input type=button onclick='changeYear(0)' value='▲'><br>
<input type=button onclick='changeYear(1)' value='▼'><br><br>
月<br><input type=button onclick='changeMonth(0)' value='↑'><br>
<input type=button onclick='changeMonth(1)' value='↓'><br><br>
<input type=button onclick='changeMonth(2)' value='今'><br><br>
<a href='javascript:getNianli(1)'>年历1</a><br><br>
<a href='javascript:getNianli(2)'>年历2</a><br><br>
<a href='readme.htm'>帮助</a>
</td>
</tr>
<tr><td colspan=3 width="100%">
<table width="100%" border=0 cellpadding=3 cellspacing=2>
<tr>
<td width="40%" id=Cal4 class=body2 style='line-height: 150%'></td>
<td width="30%" id=Cal5 class=body2 style='line-height: 150%'>
</td><td width="30%" id=Cal6 class=body2 style='line-height: 150%'></td>
</tr>
</table>
</td></tr>
<tr><td colspan=3 width="100%" style="font-size:12px;background-color:#000000;color:#FFFFFF;line-height:150%" align=center>许剑伟 2008年7月设计. 阿剑工作室 All Rights Reserved, © 2008</td></tr>
</table>
<div id=Cal_pan style="font-size:12px; position:absolute; z-index:1; width:160;FILTER: shadow(color=#333333,direction=135);display:none">
<div id=Cal_pan_in style="background-color:#3333A0;width:150;text-align:center;line-height: 150%; color:#FFFFFF; display:block;filter:Alpha(opacity=80)">abc</div><br>
</div>
<script language=javascript>
//==========================
//页面生成有关的函数
//==========================
/********************
当前时间初始化
*********************/
var now=new Date();
var nowY,nowM,nowD,nowJD;
JD.Y =nowY = now.getFullYear();
JD.M = nowM = now.getMonth()+1;
JD.D = nowD = now.getDate();
JD.h = JD.m = JD.s =0;
nowJD = int2(JD.toJD()+0.5)-2451545;
Cal_y.value = nowY;
Cal_m.value = nowM;
/********************
即时坐标计算等
*********************/
function shiCha(t,a,dL,E){ //时差计算
t/=10;
var L, t2=t*t,t3=t2*t,t4=t3*t,t5=t4*t;
L = 1753469512 + 6283319653318*t + 529674*t2 + 432*t3 - 1124*t4 - 9*t5 + 630 * Math.cos(6+3*t);
L = L/1000000000 + Math.PI; //太阳平黄经
L = L - 20.5/rad - a + dL*Math.cos(E); //a是太阳视赤经
L = rad2mrad(L);
if(L>Math.PI) L-=pi2;
return L;
}
function taiYangShi(jd,L,c){ //转入格林尼治时间UT及本地经度及时差,c=0返回本地平太阳时,c=时差就返回真太阳时,返回的单位是弧度
var t=jd-L/pi2+c/pi2;
JD.setFromJD(t+J2000);
return JD.toStr().substr(12,8);
}
function zb_calc(T,L,fa){ //T是力学时,站点经纬L,fa
var s,z=new Array(),z2=new Array(),z3=new Array();
var dt = JD.deltatT2(T); //TD-UT
var jd = T-dt; //得到J2000起算的的儒略数
T/=36525; ZB.nutation(T); //章动计算
var E = ZB.hcjj(T)+ZB.dE; //真黄赤交角
var dL = ZB.dL; //黄经章动
var gst= ZB.gst(jd,dt) + ZB.dL*Math.cos(E); //真恒星时(不考虑非多项式部分)
var ShiJ;
//月球坐标测试
XL.M_coord(T,z,-1,-1,-1); //月球坐标
z[0] = rad2mrad( z[0]+ZB.gxc_moonLon(T)+ZB.dL ); //补上月球光行差及章动
z[1] += ZB.gxc_moonLat(T);
z2[0] = z[0], z2[1] = z[1], z2[2] = z[2];
ZB.llrConv( z2, E ); //转为赤道坐标
ShiJ = rad2mrad(gst - L - z2[0]); //得到此刻天体时角
if( ShiJ>Math.PI ) ShiJ -= pi2;
z3[0] = (Math.PI/2-ShiJ); z3[1] = z2[1]; z3[2]=z2[2]/1.496e8; //转到相对于地平赤道分点的赤道坐标
ZB.parallax(z3,ShiJ,fa,0); //视差修正
ZB.llrConv( z3, Math.PI/2-fa ); //转到地平坐标(只改经纬度)
z3[0] = rad2mrad( Math.PI/2-z3[0] );
if(z3[1]>0) z3[1] += ZB.AR2(z3[1]); //大气折射修正
s = '<b>月球的当日真分点地心坐标</b><br>';
s += '视黄经 ' + rad2str(z[0],0);
s += '视黄纬 ' + rad2str(z[1],0)+'<br>';
s += '视赤经 ' + rad2str(z2[0],1);
s += '视赤纬 ' + rad2str(z2[1],0)+'<br>';
s += '径距离 ' + int2(z[2]+0.5)+'千米 ';
s += '平时角 ' + rad2str(ShiJ,0) + '<br>';
s += "方位角 " + rad2str(z3[0],0);
s += "高度角 " + rad2str(z3[1],0) + "<br>";
s += "亮面比例 " + ( int2(XL.moonIll(T)*100000+0.5)/1000 )+'% ';
s += "站心视半径 " + (int2(XL.moonRad(z[2],z3[1])/60*100+0.5)/100)+"'<br>";
XL.E_coord(T,z,-1); //地球坐标
z[0] = rad2mrad(z[0]+Math.PI+ZB.gxc_sunLon(T)+ZB.dL); //补上太阳光行差及章动
z[1] =-z[1] + ZB.gxc_sunLat(T); //z数组为太阳地心黄道视坐标
z2[0] = z[0], z2[1] = z[1], z2[2] = z[2];
ZB.llrConv( z2, E ); //z2太阳地心赤道坐标
ShiJ = rad2mrad(gst - L - z2[0]); //得到此刻天体时角
if( ShiJ>Math.PI ) ShiJ -= pi2;
z3[0] = (Math.PI/2-ShiJ); z3[1] = z2[1]; z3[2]=z2[2]; //转到相对于地平赤道分点的赤道坐标
//ZB.parallax(z3,ShiJ,fa,0); //视差修正
ZB.llrConv( z3, Math.PI/2-fa );
z3[0] = rad2mrad( Math.PI/2-z3[0] );
if(z3[1]>0) z3[1] += ZB.AR2(z3[1]); //大气折射修正
z3[1] -= 8.794/rad/z3[2]*Math.cos(z3[1]); //直接在地平坐标中视差修正(这里把地球看为球形,精度比ZB.parallax()稍差一些)
s += '<b>太阳的当日真分点地心坐标</b><br>';
s += '视黄经 ' + rad2str(z[0],0);
s += '视黄纬 ' + rad2str(z[1],0) + '<br>';
s += '视赤经 ' + rad2str(z2[0],1);
s += '视赤纬 ' + rad2str(z2[1],0) + '<br>';
s += '径距离 ' + (int2(z2[2]*1000000+0.5)/1000000) + 'AU ';
s += '平时角 ' + rad2str(ShiJ,0) + '<br>'; //天顶到天体视赤经的差
s += '方位角 ' + rad2str(z3[0],0);
s += '高度角 ' + rad2str(z3[1],0) + '<br>';
var sc=shiCha(T,z2[0],dL,E); //时差
var sc_str=rad2str(sc,1);
sc_str = sc_str.substr(0,1)+sc_str.substr(6,10);
s += '时差 ' + sc_str + '<br>';
s += '本地平太阳时 ' + taiYangShi(jd,L,0)+' 真太阳时 '+ taiYangShi(jd,L,sc)+'<br>';
return s;
}
function RTS1(jd,vJ,vW){
SZJ.calcRTS(jd, 1, vJ, vW, -8); //升降计算,使用北时时间,-8指东8区
var s, ob = SZJ.rts[0];
JD.setFromJD(jd+J2000);
s = '日期' + JD.toStr().substr(0,11)+'<br>';
s += '日出 '+ob.s +' 日上中天 '+ob.z +'<br>';
s += '日落 '+ob.j +' 月上中天 '+ob.Mz+'<br>';
s += '月出 '+ob.Ms+' 晨光开始 '+ob.c +'<br>';
s += '月落 '+ob.Mj+' 昏影终止 '+ob.h +'<br>';
s += '昼长 '+ob.sj+' 光照时间 '+ob.ch+'<br>';
return s;
}
/********************
cookie读写函数
*********************/
function getCookie(name) {
var start,end, s = document.cookie;
start = s.indexOf(name + '='); if (start == -1) return '';
start += name.length + 1;
end = s.indexOf(';', start);
if (end == -1) end = s.length;
return unescape(s.substring(start, end));
}
function setCookie(name,value){
var Days = 700; //此 cookie 将被保存多天
var exp = new Date();
exp.setTime(exp.getTime() + Days*86400*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
/****************
地理经纬度选择的页面控制函数
****************/
function addOp(sel,v,t){
var Op = document.createElement("OPTION");
Op.value=v; Op.text=t;
sel.add(Op);
}
function change2(){
var i,v = new JWdecode( Sel2.options[Sel2.selectedIndex].value );
Sel2.vJ = v.J; Sel2.vW = v.W;
Cal_zdzb.innerHTML = 'L='+rad2str2(v.J)+' φ='+rad2str2(v.W);
if(Cal5.bak){
Cal5.bak = RTS1(nowJD, v.J, v.W);
Cal5.innerHTML = Cal5.bak;
}
setCookie('Sel1',Sel1.selectedIndex);
setCookie('Sel2',Sel2.selectedIndex);
}
function change(def){
if(def) Sel1.selectedIndex = getCookie('Sel1');
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) );
if(def) Sel2.selectedIndex = getCookie('Sel2');
change2();
}
var i;
for(i=0;i<JWv.length;i++) addOp(document.all.Sel1,i,JWv[i][0]);
change(1);
/****************
外地时间选择
****************/
function change_dq(){
var v = Sel_dq.options[Sel_dq.selectedIndex].value;
Clock2_dq.innerHTML = '['+v.substr(6,v.length-6)+']';
Sel_dq.v = v;
}
function change_dq_time(jd){
var v = Sel_dq.v, h=(v.substr(1,2)-0) + v.substr(3,2)/60;
if(v.substr(0,1)=='-') h = -h;
JD.setFromJD(jd+J2000);
var h2=h;
if(v.substr(5,1)=='*'){
if(JD.M==4){
var w = ( 8-(jd-JD.D+1)%7 )%7; //本月第一天与星期天相差的天数
if(JD.D-1>w) h2++;
}
if(JD.M==10){
var w = ( 6+(jd-JD.D+31)%7 )%7; //本月最后一天的星期
if(31-JD.D>w) h2++;
}
if(JD.M>4&&JD.M<10) h2++;
}
JD.setFromJD(jd+J2000+h2/24);
Clock2.innerHTML = JD.toStr() + (h2==h?'':'<font color=red>¤</font>');
}
for(i=0;i<SQv.length;i++){
var c=SQv[i].split(';');
addOp(Sel_dq,c[0],c[1]);
}
change_dq();
/**********************
背景生成相关
**********************/
var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
function getTop(e){ //获取元素的纵坐标,显示背景年月时用到
var offset=e.offsetTop;
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
return offset;
}
function getLeft(e){ //获取元素的横坐标
var offset=e.offsetLeft;
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
return offset;
}
/**********************
月历页面生成
**********************/
function showNH(){ //显示年号
alert(Lunar.lun.nianhao.nh2);
}
var get_year_screen_onceBC = 0;
function get_year_screen(c){ //取输入年份,主要解决公元前的输入问题
var y = String(c).replace(/[^0-9Bb\*-]/g,'');
var q = y.substr(0,1);
if( q=='B' || q=='b' || q=='*' ){ //通用纪年法(公元前)
y = 1-y.substr(1,y.length);
if(y>0) { alert('通用纪法的公元前纪法从B.C.1年开始。并且没有公元0年'); return -10000; }
}else{
y -= 0;
if(y<=0 && !get_year_screen_onceBC){
alert('你输入的是天文纪年,用负号表示公元前。通用纪年法可用BC或bc或B或b或*表示公元前。');
get_year_screen_onceBC =1;
}
}
if( y < -4712 ) { alert('不得小于B.C. 4713'); return -10000; }
if( y > 9999 ) alert('超过9999年的农历计算很不准。');
return y;
}
function set_year_screen(y){ //输入天文纪年,转回显示用的常规纪年
y -= 0;
if( y<=0 ) return 'B'+ (-y+1);
return ''+y;
}
function showMessD(n,bak){ //显时月、日摘要信息。调用前应先执Lunar.calc2()
if(event){ if(event.ctrlKey) return; }
if(n==-1){
Cal_pan.style.display = 'none';
Cal5.innerHTML = Cal5.bak;
Cal6.innerHTML = Cal6.bak;
return;
}
var ob = Lunar.lun[n];
Cal5.innerHTML = RTS1(ob.d0, Sel2.vJ-0, Sel2.vW-0);
Cal6.innerHTML = '儒略日数 ' + (ob.d0+J2000) + '<br>' +ob.y+'-'+ob.m+'-'+ob.d+' '+ob.Lyear2 + '年 '+ ob.Lmonth2 + '月 ' + ob.Lday2 + '日<br>' + ob.Ltime2;
if(window.event && window.event.srcElement.tagName=='SPAN'){
s = set_year_screen(ob.y) + '年' + ob.m + '月' + ob.d + '日<br>'
s += '星期' + Lunar.Weeks[ob.week] + ' ' + ob.XiZ +'<br>';
s += 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-80;
Cal_pan.style.top = window.event.y+document.body.scrollTop +((ob.weeki+2<ob.weekN) ? 25:-150);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -