您的位置:首页 > 其它

另一个日历(根据农历网上的寿星万年历修改)最新修改适应FF

2008-12-03 19:38 1056 查看
td.body2{font-family: 宋体;font-size: 12px}
td.body2 input {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.pb {font-family: Arial Black; text-align: center;font-size: 24px;color: violet}
span.cur{background-color:#90D050}

寿星万年历 2008版(V2.0)
本地时间

外地时间

省份



站点坐标 暂停

力学时

function selectMonChange(op,evt)
{//回车的时显示
if(evt.keyCode==13)
{
getLunar();
}
}
function setFocus(evt)
{//alert(event.keyCode);
if(evt.keyCode==13)
{
document.getElementById('Cal_y').select();
evt.keyCode=13;
}
}

/****************************************
以下是天文计算部分,包含有:violet
常数 rad : 每弧度的角秒数
常数 J2000 : 2000年1月1日 12:00:00 的儒略日数
常数 pi2 : 圆周率的2倍,即2*3.14159...
trim() : 去除字串首尾的空格
rad2str() : 弧度转为"度分秒"或"时分秒"
rad2str2() : 弧度转为"度分"
rad2mrad() : 将超出0到360度的角度转为0到360度的解度
mod2(a,b) : 临界余数(a与最近的整倍数b相差的距离)
int2(a) : 取小等于a的最大整数
物件 JD : 公历——儒略日——时间物件
物件 ZB : 坐标变换物件,包含坐标旋转、章动、日月光行差(时)、视差、大气折射、恒星时的计算
物件 XL : 日月黄道平分点坐标、视坐标、速度、已知经度反求时间等方面的计算
物件 SZJ : 用来计算日月的升起、中天、降落
注意,上述函数或物件是纯天文学的,根据实际需要组合使用可以得到所需要的各种日月坐标,计算精度及计算速度也是可以根据需要有效控制的。
*****************************************/
var Cal_y = document.getElementById('Cal_y');
var Cal_m = document.getElementById('Cal_m');
var Sel1 = document.getElementById('Sel1');
var Sel2 = document.getElementById('Sel2');
var Cal_pause = document.getElementById('Cal_pause');
var Cal_T = document.getElementById('Cal_T');
var Sel_dq = document.getElementById('Sel_dq');
rad = 180*3600/Math.PI,
J2000= 2451545;
pi2 = Math.PI*2;
function trim(s){ return s.replace(/(^\s*)|(\s*$)/g, ""); }
function rad2str(d,tim){ //将弧度转为字串
//tim=0输出格式示例: -23°59' 48.23"
//tim=1输出格式示例: 18h 29m 44.52s
var s=" ";
var w1="°",w2="'",w3='"';
if(d<0) d=-d,s='-';
if(tim){ d*=12/Math.PI; w1="h ",w2="m ",w3="s"; }
else d*=180/Math.PI;
var a=Math.floor(d); d=(d-a)*60;
var b=Math.floor(d); d=(d-b)*60;
var c=Math.floor(d); d=(d-c)*100;
d=Math.floor(d+0.5);
if(d>=100) d-=100, c++;
if(c>=60) c-=60, b++;
if(b>=60) b-=60, a++;
a=" "+a, b="0"+b, c="0"+c, d="0"+d;
s+=a.substr(a.length-3,3)+w1;
s+=b.substr(b.length-2,2)+w2;
s+=c.substr(c.length-2,2)+".";
s+=d.substr(d.length-2,2)+w3;
return s;
}
function rad2str2(d){ //将弧度转为字串,精确到分
//输出格式示例: -23°59'
var s="+";
var w1="°",w2="'",w3='"';
if(d<0) d=-d,s='-';
d*=180/Math.PI;
var a=Math.floor(d);
var b=Math.floor((d-a)*60+0.5);
if(b>=60) b-=60, a++;
a=" "+a, b="0"+b;
s+=a.substr(a.length-3,3)+w1;
s+=b.substr(b.length-2,2)+w2;
return s;
}

function rad2mrad(v){ //对超过0-2PI的角度转为0-2PI
v=v % (2*Math.PI);
if(v<0) return v+2*Math.PI;
return v;
}
function mod2(a,b){ //临界余数(a与最近的整倍数b相差的距离)
var c=a/b;
c -= Math.floor(c);
if(c>0.5) c-=1;
return c*b;
}
function int2(v){ return Math.floor(v); } //取整数部分

var JD={ //日期元件
Y:2000, M:1, D:1, h:12, m:0, s:0,
dts:new Array( // TD - UT1 计算表
-4000,108371.7,-13036.80,392.000, 0.0000, -500, 17201.0, -627.82, 16.170,-0.3413,
-150, 12200.6, -346.41, 5.403,-0.1593, 150, 9113.8, -328.13, -1.647, 0.0377,
500, 5707.5, -391.41, 0.915, 0.3145, 900, 2203.4, -283.45, 13.034,-0.1778,
1300, 490.1, -57.35, 2.085,-0.0072, 1600, 120.0, -9.81, -1.532, 0.1403,
1700, 10.2, -0.91, 0.510,-0.0370, 1800, 13.4, -0.72, 0.202,-0.0193,
1830, 7.8, -1.81, 0.416,-0.0247, 1860, 8.3, -0.13, -0.406, 0.0292,
1880, -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169,-0.0135,
1920, 21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031,
1960, 33.2, 0.51, 0.231,-0.0109, 1980, 51.0, 1.29, -0.026, 0.0032,
2000, 63.87, 0.1, 0, 0, 2005),
deltatExt:function(y,jsd){ var dy=(y-1820)/100; return -20+jsd*dy*dy; }, //二次曲线外推
deltatT:function(y){ //计算世界时与原子时之差,传入年
if(y>=2005){
//sd是2005年之后几年(一值到y1年)的速度估计。
//sjd是y1年之后的加速度估计。瑞士星历表jsd=31,NASA网站jsd=32,skmap的jsd=29
var y1=2014, sd=0.4, jsd=31;
if(y<=y1) return 64.7 + (y-2005) *sd; //直线外推
var v = this.deltatExt(y,jsd); //二次曲线外推
var dv= this.deltatExt(y1,jsd) - ( 64.7+(y1-2005)*sd ); //y1年的二次外推与直线外推的差
if(y=588829)//判断是否为格里高利历日1582*372+10*31+15
n =int2(y/100), n =2-n+int2(n/4);//加百年闰
n +=int2(365.25*(y+4716)+0.01); //加上年引起的偏移日数
n +=int2(30.6*(m+1))+this.D; //加上月引起的偏移日数及日偏移数
n +=((this.s/60+this.m)/60+this.h)/24 - 1524.5;
return n;
},
setFromJD:function(jd){ //儒略日数转公历
jd+=0.5;
var A=int2(jd), F=jd-A, D; //取得日数的整数部份A及小数部分F
if(A>=2299161) D=int2((A-1867216.25)/36524.25),A+=1+D-int2(D/4);
A +=1524; //向前移4年零2个月
this.Y =int2((A-122.1)/365.25);//年
D =A-int2(365.25*this.Y); //去除整年日数后余下日数
this.M =int2(D/30.6001); //月数
this.D =D-int2(this.M*30.6001);//去除整月日数后余下日数
this.Y-=4716; this.M--;
if(this.M>12) this.M-=12;
if(this.M<=2) this.Y++;
//日的小数转为时分秒
F*=24; this.h=int2(F); F-=this.h;
F*=60; this.m=int2(F); F-=this.m;
F*=60; this.s=F;
},
toStr:function(){ //日期转为串
var Y=" "+this.Y,M="0"+this.M, D="0"+this.D;
var h=this.h,m=this.m,s=int2(this.s+.5);
if(s>=60) s-=60,m++;
if(m>=60) m-=60,h++;
h="0"+h; m="0"+m; s="0"+s;
Y=Y.substr(Y.length-5,5); M=M.substr(M.length-2,2); D=D.substr(D.length-2,2);
h=h.substr(h.length-2,2); m=m.substr(m.length-2,2); s=s.substr(s.length-2,2);
return Y+"-"+M+"-"+D+" "+h+":"+m+":"+s;
},
setFromJD_str:function(jd){ this.setFromJD(jd); return this.toStr(); },
timeStr:function(jd){ //提取jd中的时间(去除日期)
var h,m,s;
jd+=0.5; jd = (jd - int2(jd));
jd*=24; h = int2(jd); jd-=h;
jd*=60; m = int2(jd); jd-=m;
jd*=60; s = int2(jd+0.5);
if(s>=60) s-=60,m++;
if(m>=60) m-=60,h++;
h="0"+h; m="0"+m; s="0"+s;
return h.substr(h.length-2,2)+':'+m.substr(m.length-2,2)+':'+s.substr(s.length-2,2);
}
};

var ZB={ //坐标类
llrConv:function(JW,E){ //球面坐标旋转
//黄道赤道坐标变换,赤到黄E取负
var sinE =Math.sin(E), cosE =Math.cos(E);
var sinJ =Math.sin(JW[0]),cosJ =Math.cos(JW[0]);
var sinW =Math.sin(JW[1]),cosW =Math.cos(JW[1]), tanW=Math.tan(JW[1]);
JW[0]=Math.atan2( sinJ*cosE - tanW*sinE, cosJ );
JW[1]=Math.asin ( cosE*sinW + sinE*cosW*sinJ );
JW[0]=rad2mrad(JW[0]);
},
nutB:new Array(
2.1824, -33.75705, 36e-6,-1720,920, 3.5069, 1256.66393, 11e-6,-132, 57,
1.3375,16799.4182, -51e-6, -23, 10, 4.3649, -67.5141, 72e-6, 21, -9,
0.04, -628.302, 0, -14, 0, 2.36, 8328.691, 0, 7, 0,
3.46, 1884.966, 0, -5, 2, 5.44, 16833.175, 0, -4, 2,
3.69, 25128.110, 0, -3, 0, 3.55, 628.362, 0, 2, 0),
nutation:function(t){ //章动计算,t是世纪数
var i,c,a, t2=t*t, B=this.nutB, dL=0,dE=0;
for(i=0;i= F.length) N=F.length;
for(j=0,c=0;j0) v += -0.866 +1.43*tx +0.054*tx*tx; //对公元3000年至公元5000年的拟合,最大误差小于10角秒
}
t2/=1e4,t3/=1e8,t4/=1e8;
n*=6; if(n<0) n = ob[0].length;
for(i=0;i= F.length) N=F.length;
for(j=0,c=0;j1) return Math.PI;
return Math.acos(c);
},

Mcoord:function(jd,H0,z){ //章动同时影响恒星时和天体坐标,所以不计算章动。返回时角及赤经纬
XL.M_coord( (jd+this.dt)/36525, z, 30,20,8 ); //低精度月亮赤经纬
ZB.llrConv( z, this.E ); //转为赤道坐标
z.H = rad2mrad(ZB.gst(jd,this.dt) - this.L - z[0]); if( z.H>Math.PI ) z.H -= pi2; //得到此刻天体时角
if(H0) z.H0 = this.getH( 0.7275*6378.14/z[2]-34*60/rad, z[1] ); //升起对应的时角
},
Mt : function(jd){ //月亮到中升降时刻计算,传入jd含义与St()函数相同
this.dt = JD.deltatT2(jd);
this.E = ZB.hcjj(jd/36525);
jd -= mod2(0.1726222 + 0.966136808032357*jd - 0.0366*this.dt - this.L/pi2, 1); //查找最靠近当日中午的月上中天,mod2的第1参数为本地时角近似值

var r = new Array(), sv = pi2*0.966;
r.z = r.s = r.j = r.c = r.h = jd;
this.Mcoord(jd,1,r); //月亮坐标
r.s += (-r.H0 - r.H )/sv;
r.j += ( r.H0 - r.H )/sv;
r.z += ( 0 - r.H )/sv;
this.Mcoord(r.s,1,r); r.s += ( -r.H0 - r.H )/sv;
this.Mcoord(r.j,1,r); r.j += ( +r.H0 - r.H )/sv;
this.Mcoord(r.z,0,r); r.z += ( 0 - r.H )/sv;
return r;
},

Scoord:function(jd,H0,H1,z){ //章动同时影响恒星时和天体坐标,所以不计算章动。返回时角及赤经纬
z[0] = XL.E_Lon( (jd+this.dt)/36525, 5 ) + Math.PI - 20.5/rad; //太阳坐标(修正了光行差)
z[1] = 0; z[2]=1;
ZB.llrConv( z, this.E ); //转为赤道坐标
z.H = rad2mrad(ZB.gst(jd,this.dt) - this.L - z[0]); if( z.H>Math.PI ) z.H -= pi2; //得到此刻天体时角
if(H0) z.H0 = this.getH(-50*60/rad,z[1]); //地平以下50分
if(H1) z.H1 = this.getH(-Math.PI/30,z[1]); //地平以下6度
},
St : function(jd){ //太阳到中升降时刻计算,传入jd是当地中午12点时间对应的2000年首起算的格林尼治时间UT
this.dt = JD.deltatT2(jd);
this.E = ZB.hcjj(jd/36525);
jd -= mod2(jd - this.L/pi2, 1); //查找最靠近当日中午的日上中天,mod2的第1参数为本地时角近似值

var r = new Array(), sv = pi2;
r.z = r.s = r.j = r.c = r.h = jd;
this.Scoord(jd,1,1,r); //太阳坐标
r.s += (-r.H0 - r.H )/sv; //升起
r.j += ( r.H0 - r.H )/sv; //降落
r.c += (-r.H1 - r.H )/sv; //民用晨
r.h += ( r.H1 - r.H )/sv; //民用昏
r.z += ( 0 - r.H )/sv; //中天
this.Scoord(r.s,1,0,r); r.s += ( -r.H0 - r.H )/sv;
this.Scoord(r.j,1,0,r); r.j += ( +r.H0 - r.H )/sv;
this.Scoord(r.c,0,1,r); r.c += ( -r.H1 - r.H )/sv;
this.Scoord(r.h,0,1,r); r.h += ( +r.H1 - r.H )/sv;
this.Scoord(r.z,0,0,r); r.z += ( 0 - r.H )/sv;
return r;
},

rts:new Array(),//多天的升中降
calcRTS:function(jd,n,Jdl,Wdl,sq){ //多天升中降计算,jd是当地起始略日(中午时刻),sq是时区
var i,c,r;
if(!this.rts.length) { for(var i=0;i<31;i++) this.rts[i] = new Array(); }
this.L = Jdl, this.fa = Wdl, sq/=24; //设置站点参数
for(i=0;i=0&&i=0&&c=0&&c=0&&c96) v[i] -= 97-36;
else if(v[i]>64) v[i] -= 65-10;
else v[i] -= 48;
}
this.J = -(v[2]+v[3]/60+73)/180*Math.PI;
this.W = (v[0]+v[1]/60) /180*Math.PI;
}

//纪年数据结构:数据用逗号分开,每7个描述一个年号,格式为:起始公元,使用年数,已用年数,朝代,朝号,皇帝,年号
var JNs ='';
JNs+='420,3,0,南朝/宋,武帝,刘裕,永初,423,2,0,南朝/宋,少帝,刘义符,景平,424,30,0,南朝/宋,文帝,刘義隆,元嘉,454,3,0,南朝/宋,孝武,帝刘骏,孝建,457,8,0,南朝/宋,孝武,帝刘骏,大明,465,1,0,南朝/宋,废帝,刘子业,永光,465,1,0,南朝/宋,废帝,刘子业,景和,465,7,0,南朝/宋,明帝,刘彧,泰始,472,1,0,南朝/宋,明帝,刘彧,泰豫,473,5,0,南朝/宋,废帝,刘昱,元徽,477,3,0,南朝/宋,顺帝,刘准,升明,479,4,0,南朝/齐,高帝,萧道成,建元,483,11,0,南朝/齐,武帝,萧赜,永明,494,1,0,南朝/齐,欎林王,萧昭业,隆昌,494,1,0,南朝/齐,海陵王,萧昭文,延兴,';
JNs+='494,5,0,南朝/齐,明帝,萧鸾,建武,498,1,0,南朝/齐,明帝,萧鸾,永泰,499,3,0,南朝/齐,东昏侯,萧宝,中兴,501,2,0,南朝/齐,和帝,萧宝融,中兴,502,18,0,南朝/梁,武帝,萧衍,天监,520,8,0,南朝/梁,武帝,萧衍,普通,527,3,0,南朝/梁,武帝,萧衍,大通,529,6,0,南朝/梁,武帝,萧衍,中大通,535,12,0,南朝/梁,武帝,萧衍,大同,546,2,0,南朝/梁,武帝,萧衍,中大同,547,3,0,南朝/梁,武帝,萧衍,太清,550,2,0,南朝/梁,简文帝,萧纲,大宝,551,2,0,南朝/梁,豫章王,萧栋,天正,552,4,0,南朝/梁,元帝,萧绎,承圣,555,1,0,南朝/梁,贞阳侯,萧渊明,天成,';
JNs+='555,2,0,南朝/梁,敬帝,萧方智,绍泰,556,2,0,南朝/梁,敬帝,萧方智,太平,557,3,0,南朝/陈,武帝,陈霸先,太平,560,7,0,南朝/陈,文帝,陈蒨,天嘉,566,1,0,南朝/陈,文帝,陈蒨,天康,567,2,0,南朝/陈,废帝,陈伯宗,光大,569,14,0,南朝/陈,宣帝,陈顼,太建,583,4,0,南朝/陈,后主,陈叔宝,至德,587,3,0,南朝/陈,后主,陈叔宝,祯明,555,8,0,南朝/后梁,宣帝,萧詧,大定,562,24,0,南朝/后梁,明帝,萧岿,天保,586,2,0,南朝/后梁,莒公,萧琮,广运,386,11,0,北朝/北魏,道武帝,拓跋圭,登国,396,3,0,北朝/北魏,道武帝,拓跋圭,皇始,398,7,0,北朝/北魏,道武帝,拓跋圭,天兴,';
JNs+='404,6,0,北朝/北魏,道武帝,拓跋圭,天赐,409,5,0,北朝/北魏,明元帝,拓跋嗣,永兴,414,3,0,北朝/北魏,明元帝,拓跋嗣,神瑞,416,8,0,北朝/北魏,明元帝,拓跋嗣,泰常,424,5,0,北朝/北魏,太武帝,拓跋焘,始光,428,4,0,北朝/北魏,太武帝,拓跋焘,神麚,432,3,0,北朝/北魏,太武帝,拓跋焘,延和,435,6,0,北朝/北魏,太武帝,拓跋焘,太延,440,12,0,北朝/北魏,太武帝,拓跋焘,太平真君,451,2,0,北朝/北魏,太武帝,拓跋焘,正平,452,1,0,北朝/北魏,南安王,拓跋余,承平,452,3,0,北朝/北魏,文成帝,拓跋浚,兴安,454,2,0,北朝/北魏,文成帝,拓跋浚,兴光,455,5,0,北朝/北魏,文成帝,拓跋浚,太安,460,6,0,北朝/北魏,文成帝,拓跋浚,和平,';
JNs+='466,2,0,北朝/北魏,献文帝,拓跋弘,天安,467,5,0,北朝/北魏,献文帝,拓跋弘,皇兴,471,6,0,北朝/北魏,教文帝,拓跋宏,延兴,476,1,0,北朝/北魏,孝文帝,拓跋宏,承明,477,23,0,北朝/北魏,孝文帝,拓跋宏,太和,500,4,0,北朝/北魏,宣武帝,元恪,景明,504,5,0,北朝/北魏,宣武帝,元恪,正始,508,5,0,北朝/北魏,宣武帝,元恪,永平,512,4,0,北朝/北魏,宣武帝,元恪,延昌,516,3,0,北朝/北魏,孝明帝,元诩,熙平,518,3,0,北朝/北魏,孝明帝,元诩,神龟,520,6,0,北朝/北魏,孝明帝,元诩,正光,525,3,0,北朝/北魏,孝明帝,元诩,孝昌,528,1,0,北朝/北魏,孝明帝,元诩,武泰,528,1,0,北朝/北魏,孝庄帝,元子攸,建义,';
JNs+='528,3,0,北朝/北魏,孝庄帝,元子攸,永安,530,2,0,北朝/北魏,东海王,元晔,建明,531,2,0,北朝/北魏,节闵帝,元恭,普泰,531,2,0,北朝/北魏,安定王,元朗,中兴,532,1,0,北朝/北魏,孝武帝,元修,太昌,532,1,0,北朝/北魏,孝武帝,元修,永兴,532,3,0,北朝/北魏,孝武帝,元修,永熙,534,4,0,北朝/东魏,孝静帝,元善见,天平,538,2,0,北朝/东魏,孝静帝,元善见,元象,539,4,0,北朝/东魏,孝静帝,元善见,兴和,543,8,0,北朝/东魏,孝静帝,元善见,武定,535,17,0,北朝/西魏,文帝,元宝炬,大统,552,3,0,北朝/西魏,废帝,元钦,大统,554,3,0,北朝/西魏,恭帝,元廓,大统,550,10,0,北朝/北齐,文宣帝,高洋,天保,';
JNs+='560,1,0,北朝/北齐,废帝,高殷,乾明,560,2,0,北朝/北齐,孝昭帝,高演,皇建,561,2,0,北朝/北齐,武成帝,高湛,太宁,562,4,0,北朝/北齐,武成帝,高湛,河清,565,5,0,北朝/北齐,温公,高纬,天统,570,7,0,北朝/北齐,温公,高纬,武平,576,2,0,北朝/北齐,温公,高纬,隆化,576,1,0,北朝/北齐,安德王,高延宗,德昌,577,1,0,北朝/北齐,幼主,高恒,承光,557,1,0,北朝/北周,闵帝,宇文觉,空,557,2,0,北朝/北周,明帝,宇文毓,空,559,2,0,北朝/北周,明帝,宇文毓,武成,561,5,0,北朝/北周,武帝,宇文邕,保定,566,7,0,北朝/北周,武帝,宇文邕,天和,572,7,0,北朝/北周,武帝,宇文邕,建德,';
JNs+='578,1,0,北朝/北周,武帝,宇文邕,宣政,579,1,0,北朝/北周,宣帝,宇文贇,大成,579,2,0,北朝/北周,静帝,宇文衍,大象,581,1,0,北朝/北周,静帝,宇文衍,大定,581,20,0,隋,文帝,杨坚,开皇,601,4,0,隋,文帝,杨坚,仁寿,605,13,0,隋,炀帝,杨广,大业,617,2,0,隋,恭帝,杨侑,义宁,618,9,0,唐,高祖,李渊,武德,627,23,0,唐,太宗,李世民,贞观,650,6,0,唐,高宗,李治,永徽,656,6,0,唐,高宗,李治,显庆,661,3,0,唐,高宗,李治,龙朔,664,2,0,唐,高宗,李治,麟德,666,3,0,唐,高宗,李治,乾封,';
JNs+='668,3,0,唐,高宗,李治,总章,670,5,0,唐,高宗,李治,咸亨,674,3,0,唐,高宗,李治,上元,676,4,0,唐,高宗,李治,仪凤,679,2,0,唐,高宗,李治,调露,680,2,0,唐,高宗,李治,永隆,681,2,0,唐,高宗,李治,开耀,682,2,0,唐,高宗,李治,永淳,683,1,0,唐,高宗,李治,弘道,684,1,0,唐,中宗,李显,嗣圣,684,1,0,唐,睿宗,李旦,文明,684,1,0,武周,则天后,武曌,光宅,685,4,0,武周,则天后,武曌,垂拱,689,1,0,武周,则天后,武曌,永昌,689,2,0,武周,则天后,武曌,载初,';
JNs+='690,3,0,武周,则天后,武曌,天授,692,1,0,武周,则天后,武曌,如意,692,3,0,武周,则天后,武曌,长寿,694,1,0,武周,则天后,武曌,延载,695,1,0,武周,则天后,武曌,证圣,695,2,0,武周,则天后,武曌,天册万岁,696,1,0,武周,则天后,武曌,万岁登封,696,2,0,武周,则天后,武曌,万岁通天,697,1,0,武周,则天后,武曌,神功,698,3,0,武周,则天后,武曌,圣历,700,1,0,武周,则天后,武曌,久视,701,1,0,武周,则天后,武曌,大足,701,4,0,武周,则天后,武曌,长安,705,1,0,武周,则天后,李显,神龙,705,2,0,唐,中宗,李显,神龙,';
JNs+='707,4,0,唐,中宗,李显,景龙,710,1,0,唐,温王,李重茂,唐隆,710,2,0,唐,睿宗,李旦,景云,712,1,0,唐,睿宗,李旦,太极,712,1,0,唐,睿宗,李旦,延和,712,2,0,唐,玄宗,李隆基,先天,713,29,0,唐,玄宗,李隆基,开元,742,15,0,唐,玄宗,李隆基,天宝,756,3,0,唐,肃宗,李亨,至德,758,3,0,唐,肃宗,李亨,乾元,760,3,0,唐,肃宗,李亨,上元,762,2,0,唐,肃宗,李亨,宝应,763,2,0,唐,代宗,李豫,广德,765,2,0,唐,肃宗,李亨,永泰,766,14,0,唐,肃宗,李亨,大历,';
JNs+='780,4,0,唐,德宗,李适,建中,784,1,0,唐,德宗,李适,兴元,785,21,0,唐,德宗,李适,贞元,805,1,0,唐,顺宗,李诵,永贞,806,15,0,唐,宪宗,李纯,元和,821,4,0,唐,穆宗,李恒,长庆,825,3,0,唐,敬宗,李湛,宝历,827,9,0,唐,文宗,李昂,大和,836,5,0,唐,文宗,李昂,开成,841,6,0,唐,武宗,李炎,会昌,847,14,0,唐,宣宗,李忱,大中,860,15,0,唐,宣宗,李忱,咸通,874,6,0,唐,僖宗,李儇,乾符,880,2,0,唐,僖宗,李儇,广明,881,5,0,唐,僖宗,李儇,中和,';
JNs+='885,4,0,唐,僖宗,李儇,光启,888,1,0,唐,僖宗,李儇,文德,889,1,0,唐,昭宗,李晔,龙纪,890,2,0,唐,昭宗,李晔,大顺,892,2,0,唐,昭宗,李晔,景福,894,5,0,唐,昭宗,李晔,乾宁,898,4,0,唐,昭宗,李晔,光化,901,4,0,唐,昭宗,李晔,天复,904,1,0,唐,昭宗,李晔,天佑,905,3,1,唐,昭宣帝,李祝,天佑,907,5,0,五代/梁,太祖,朱温,开平,911,2,0,五代/梁,太祖,朱温,乾化,913,1,0,五代/梁,庶人,朱友圭,凤历,913,3,2,五代/梁,末帝,朱友贞,乾化,915,7,0,五代/梁,末帝,朱友贞,贞明,';
JNs+='921,3,0,五代/梁,末帝,朱友贞,龙德,923,4,0,五代/唐,庄宗,李存勗,同光,926,5,0,五代/唐,明宗,李嗣源,天成,930,4,0,五代/唐,明宗,李嗣源,长兴,934,1,0,五代/唐,闵帝,李从厚,应顺,934,3,0,五代/唐,潞王,李从珂,清泰,936,6,0,五代/晋,高祖,石敬瑭,天福,942,2,6,五代/晋,出帝,石重贵,天福,944,3,0,五代/晋,出帝,石重贵,开运,947,12,0,五代/汉,高祖,刘知远,天福,948,1,0,五代/汉,隐帝,刘承祐,乾祐,948,3,0,五代/汉,隐帝,刘承祐,乾祐,951,3,0,五代/周,太祖,郭威,广顺,954,1,0,五代/周,太祖,郭威,显德,954,6,0,五代/周,世宗,柴荣,显德,';
JNs+='959,2,5,五代/周,恭帝,郭宗训,显德,960,4,0,北宋,太祖,赵匡胤,建隆,963,6,0,北宋,太祖,赵匡胤,乾德,968,9,0,北宋,太祖,赵匡胤,开宝,976,9,0,北宋,太宗,赵炅,太平兴国,984,4,0,北宋,太宗,赵炅,雍熙,988,2,0,北宋,太宗,赵炅,端拱,990,5,0,北宋,太宗,赵炅,淳化,995,3,0,北宋,太宗,赵炅,至道,998,6,0,北宋,真宗,赵恒,咸平,1004,4,0,北宋,真宗,赵恒,景德,1008,9,0,北宋,真宗,赵恒,大中祥符,1017,5,0,北宋,真宗,赵恒,天禧,1022,1,0,北宋,真宗,赵恒,乾兴,1023,10,0,北宋,仁宗,赵祯,天圣,';
JNs+='1032,2,0,北宋,仁宗,赵祯,明道,1034,5,0,北宋,仁宗,赵祯,景祐,1038,3,0,北宋,仁宗,赵祯,宝元,1040,2,0,北宋,仁宗,赵祯,康定,1041,8,0,北宋,仁宗,赵祯,庆历,1049,6,0,北宋,仁宗,赵祯,皇祐,1054,3,0,北宋,仁宗,赵祯,至和,1056,8,0,北宋,仁宗,赵祯,嘉祐,1064,4,0,北宋,英宗,赵曙,治平,1068,10,0,北宋,神宗,赵顼,熙宁,1078,8,0,北宋,神宗,赵顼,元丰,1086,9,0,北宋,哲宗,赵煦,元祐,1094,5,0,北宋,哲宗,赵煦,绍圣,1098,3,0,北宋,哲宗,赵煦,元符,1101,1,0,北宋,徽宗,赵佶,建中靖国,';
JNs+='1102,5,0,北宋,徽宗,赵佶,崇宁,1107,4,0,北宋,徽宗,赵佶,大观,1111,8,0,北宋,徽宗,赵佶,政和,1118,2,0,北宋,徽宗,赵佶,重和,1119,7,0,北宋,徽宗,赵佶,宣和,1126,2,0,北宋,钦宗,赵桓,靖康,1127,4,0,南宋,高宗,赵构,建炎,1131,32,0,南宋,高宗,赵构,绍兴,1163,2,0,南宋,孝宗,赵慎,隆兴,1165,9,0,南宋,孝宗,赵慎,乾道,1174,16,0,南宋,孝宗,赵慎,淳熙,1190,5,0,南宋,光宗,赵暴,绍熙,1195,6,0,南宋,宁宗,赵扩,庆元,1201,4,0,南宋,宁宗,赵扩,嘉泰,1205,3,0,南宋,宁宗,赵扩,开禧,';
JNs+='1208,17,0,南宋,宁宗,赵扩,嘉定,1225,3,0,南宋,理宗,赵昀,宝庆,1228,6,0,南宋,理宗,赵昀,绍定,1234,3,0,南宋,理宗,赵昀,端平,1237,4,0,南宋,理宗,赵昀,嘉熙,1241,12,0,南宋,理宗,赵昀,淳祐,1253,6,0,南宋,理宗,赵昀,寶祐,1259,1,0,南宋,理宗,赵昀,开庆,1260,5,0,南宋,理宗,赵昀,景定,1265,10,0,南宋,度宗,赵禥,咸淳,1275,2,0,南宋,恭宗,赵(上“日”下“丝”),德祐 ,1276,3,0,南宋,端宗,赵(上“日”下“正”),景炎,1278,2,0,南宋,帝昺,赵昺,祥兴,1271,24,7,元,世祖,孛儿只斤·忽必烈,至元,1295,3,0,元,成宗,孛儿只斤·铁穆耳,元贞,';
JNs+='1297,11,0,元,成宗,孛儿只斤·铁穆耳,大德,1308,4,0,元,武宗,孛儿只斤·海山,至大,1312,2,0,元,仁宗,孛儿只斤·爱育黎拔力八达,皇庆,1314,7,0,元,仁宗,孛儿只斤·愛育黎拔力八達,延祐,1321,3,0,元,英宗,孛儿只斤·宗硕德八剌,至治,1324,5,0,元,泰定帝,孛儿只斤·也孙铁木耳,泰定,1328,1,0,元,泰定帝,孛儿只斤·也孙铁木耳,至和,1328,1,0,元,幼主,孛儿只斤·阿速吉八,天顺,1328,3,0,元,文宗,孛儿只斤·图贴睦尔,天历,1330,3,0,元,文宗,孛儿只斤·图贴睦尔,至顺,1333,3,0,元,惠宗,孛儿只斤·妥镤贴睦尔,元统,1335,6,0,元,惠宗,孛儿只斤·妥镤贴睦尔,至元,1341,28,0,元,惠宗,孛儿只斤·妥镤贴睦尔,至正,1368,31,0,明,太祖,朱元璋,洪武,1399,4,0,明,惠帝,朱允溫,建文,';
JNs+='1403,22,0,明,成祖,朱棣,永乐,1425,1,0,明,仁宗,朱高炽,洪熙,1426,10,0,明,宣宗,朱瞻基,宣德,1436,14,0,明,英宗,朱祁镇,正统,1450,7,0,明,代宗,朱祁钰,景泰,1457,8,0,明,英宗,朱祁镇,天顺,1465,23,0,明,宪宗,朱见深,成化,1488,18,0,明,孝宗,朱祐樘,弘治,1506,16,0,明,武宗,朱厚照,正德,1522,45,0,明,世宗,朱厚熜,嘉靖,1567,6,0,明,穆宗,朱载贺,隆庆,1573,48,0,明,神宗,朱翊钧,万历,1620,1,0,明,光宗,朱常洛,泰昌,1621,7,0,明,熹宗,朱同校,天启,1628,17,0,明,毅宗,朱由检,崇祯,';
JNs+='1644,18,0,清,世祖,爱新觉罗福临,顺治,1662,61,0,清,圣祖,爱新觉罗玄烨,康熙,1723,13,0,清,世宗,爱新觉罗胤禛,雍正,1736,60,0,清,高宗,爱新觉罗弘历,乾隆,1796,25,0,清,仁宗,爱新觉罗颙琰,嘉庆,1821,30,0,清,宣宗,爱新觉罗旻宁,道光,1851,11,0,清,文宗,爱新觉罗奕詝,咸丰,1862,13,0,清,穆宗,爱新觉罗载淳,同治,1875,34,0,清,德宗,爱新觉罗载湉,光绪,1909,3,0,清,无朝,爱新觉罗溥仪,宣统,1912,37,0,现代,中国,国民党,民国,1949,9999,0,现代,中国,共·产·党,共和国';
JNs = JNs.split(',');
for(i=0;i=j+JNs[i+1]) continue;
c = '['+JNs[i+3]+']';//朝代
k = JNs[i+6]+(y-j+1+JNs[i+2])+'年'; //年号及年次
this.nh = c+k;
this.nh2 += c+JNs[i+4]+' '+JNs[i+5]+' '+k + '; '; //i为年号元年,i+3朝代,i+4朝号,i+5皇帝,i+6年号
}
}

/*********************************
=====以下是公历、农历、回历综合日历计算=====

Lunar:日历计算物件

使用条件:事先引用eph.js、JN.js、kwb.js三个文件

一、 calc:function(jd,jing)方法
·功能:
农历排月序计算,可定出农历基本信息(如大小月、闰月、合朔等)
·入口参数:
jd是J2000.0起算的儒略日数TD,使用UT也可以
jing=1表示精算合朔及节气时刻
jing=0则是精算,但在日期临界时精算
·返回:
leap 闰月位置(即置闰的月序号),0表示不置闰
ym 数组,各月名称,共12或13个有效月分
ZQ: 数组,节气表(整数儒略日),25个有效,整数儒略日对应该日的12:00:00
HS 数组,合朔表(整数儒略日),15个有效,整数儒略日对应该日的12:00:00
dx 数组,14个有效
nu 数组,闰月情况,14个有效
ZQ.mangzhong 芒种儒略日,计算入梅用到
ZQ.xiaoshu 小暑儒略日,计算出梅用到
ZQ.liqiu 立秋儒略日,计算三伏用到
ZQ.lichun 立春儒略日,计算纪年用到

二、Lunar.calc2(By,Bm,sw)方法
·功能:
计算某一个月的“公历、农历、回历”三合历
·入口参数:
By是年(公历)
Bm是月(公历)
sw表示是否计算月相及节气时刻。
·返回:
结果返回在Lunar.lun中,它是一个数组,以下说明简写为lun,它包含完整的公历一个月的信息。
lun[0]是本月第一天信息,lun[2]为第二天,其余类推。
lun中的各元数下文记作ob。
·注意:
此函数被调用时,Lunar.calc()被执行
·公历月信息
lun.w0 本月第一天的星期
lun.y 公历年份
lun.m 公历月分
lun.d0 月首的J2000.0起算的儒略日数
lun.dn 本月的天数
lun.Ly 该年的干支纪年
lun.ShX 该年的生肖
lun.nianhao.nh 年号
lun.nianhao.nh2 年号详细
·各日公历信息
ob.d0 2000.0起算儒略日,北京时12:00
ob.di 所在公历月内日序数
ob.y 所在公历年,同lun.y
ob.m 所在公历月,同lun.m
ob.d 日名称(公历)
ob.dn 所在公历月的总天数,同lun.d0
ob.week0所在月的月首的星期,同lun.w0
ob.week 星期
ob.weeki在本月中的周序号
ob.weekN本月的总周数
·各日农历信息
ob.Ldi 距农历月首的编移量,0对应初一
ob.Ldc 日名称(农历)
ob.cur_dz 距冬至的天数
ob.cur_xz 距夏至的天数
ob.cur_lq 距立秋的天数
ob.cur_mz 距芒种的天数
ob.cur_xs 距小暑的天数
ob.Lmc 月名称
ob.Ldn 月大小
ob.Lleap闰状况(值为'闰'或空串)
ob.Lmc2 下个月名称,判断除夕时要用到
·各日的农历纪年、月、日、时及星座
ob.Lyear 农历纪年(10进制,1984年起算,分界点可以是立春也可以是春节,在程序中选择一个)
ob.Lyear2 干支纪年
ob.Lmonth 纪月处理,1998年12月7日(大雪)开始连续进行节气计数,0为甲子
ob.Lmonth2 干支纪月
ob.Lday2 纪日
ob.Ltime2 纪时
ob.XiZ 星座
·各日节日信息
ob.A 重要喜庆日子名称(可将日子名称置红)
ob.B 重要日子名称
ob.C 各种日子名称(连成一大串)
ob.Fjia 放假日子(可用于日期数字置红)
·各日回历信息
ob.Hyear 年(回历)
ob.Hmonth 月(回历)
ob.Hday 日(回历)
·其它信息,sw=1时有效
ob.yxmc 月相名称
ob.yxjd 月相时刻(儒略日)
ob.yxsj 月相时间串
ob.jqmc 节气名称
ob.jqjd 节气时刻(儒略日)
ob.jqsj 节气时间串
**********************************/

/************************
第一部分:古代日历生成
适用范围 -103年2月22日——1959年12月
平气平朔计算使用古历参数进行计算
定朔、定气计算使用开普勒椭圆轨道计算,同时考虑了光行差和力学时与UT1的时间差
古代历算仅在晚期才使用开普勒方法计算,此前多采用一些修正表并插值得到,精度很低,与本程序中
的开普勒方法存在误差,造成朔日计算错误1千多个,这些错误使用一个修正表进行订正。同样,定气部分
也使用了相同的方法时行订正。
suo_high()与qi_high()依赖外部星历函数
*************************/
function qiSuo_jieya(s){ //气朔解压缩
s=s.replace(/J/g,'00');
s=s.replace(/I/g,'000');
s=s.replace(/H/g,'0000');
s=s.replace(/G/g,'00000');

s=s.replace(/t/g,'02');
s=s.replace(/s/g,'002');
s=s.replace(/r/g,'0002');
s=s.replace(/q/g,'00002');
s=s.replace(/p/g,'000002');
s=s.replace(/o/g,'0000002');
s=s.replace(/n/g,'00000002');
s=s.replace(/m/g,'000000002');
s=s.replace(/l/g,'0000000002');

s=s.replace(/k/g,'01');
s=s.replace(/j/g,'0101');
s=s.replace(/i/g,'001');
s=s.replace(/h/g,'001001');
s=s.replace(/g/g,'0001');
s=s.replace(/f/g,'00001');
s=s.replace(/e/g,'000001');
s=s.replace(/d/g,'0000001');
s=s.replace(/c/g,'00000001');
s=s.replace(/b/g,'000000001');
s=s.replace(/a/g,'0000000001');

var o="0000000000",o2=o+o;
s=s.replace(/A/g,o2+o2+o2);
s=s.replace(/B/g,o2+o2+o);
s=s.replace(/C/g,o2+o2);
s=s.replace(/D/g,o2+o);
s=s.replace(/E/g,o2);
s=s.replace(/F/g,o);
return s;
}

//气朔日期计算公式:D = k*n + b , 式中n=0,1,2,3,...,N-1, N为该式适用的范围
//h表示k不变b允许的误差,如果b不变则k许可误差为h/N
//每行第1个参数为k,第2参数为b

//朔直线拟合参数
var suoKB=Array(
1683489.570910,29.53086158, // -103-02-22 h=0.00324 汉书·律历志(太初历)平气平朔
1752148.041079,29.53085097, // 85-02-13 h=0.00049 后汉书·律历志(四分历)
1807665.420323,29.53059851, // 237-02-12 h=0.00033 晋书·律历志(景初历)
1883618.114100,29.53060000, // 445-01-24 h=0.00030 宋书·律历志(何承天元嘉历)
1907360.704700,29.53060000, // 510-01-26 h=0.00030 宋书·律历志(祖冲之大明历)
1936596.224900,29.53060000, // 590-02-10 h=0.01010 随书·律历志(开皇历)
1939135.675300,29.53060000, // 597-01-24 h=0.00890 随书·律历志(大业历)
1947168.00// 619-01-21

);
//气直线拟合参数
var qiKB=Array(
1683491.390544,15.21875004, // -103-02-23 h=0.01555 汉书·律历志(太初历)平气平朔 回归年=365.25000
1752157.640664,15.21874998, // 85-02-23 h=0.01559 后汉书·律历志(四分历) 回归年=365.25000
1807675.003759,15.21862028, // 237-02-22 h=0.00010 晋书·律历志(景初历) 回归年=365.24689
1883627.765182,15.21861229, // 445-02-03 h=0.00026 宋书·律历志(何承天元嘉历) 回归年=365.24670
1907369.128100,15.21844918, // 510-02-03 h=0.00027 宋书·律历志(祖冲之大明历) 回归年=365.24278
1936603.140413,15.21842500, // 590-02-17 h=0.00149 随书·律历志(开皇历) 回归年=365.24220
1939145.516964,15.21848696, // 597-02-03 h=0.00003 随书·律历志(大业历) 回归年=365.24369
1947180.798300,15.21852484, // 619-02-03 h=0.00052 新唐书·历志(戊寅元历)平气定朔 回归年=365.24460
1964362.041824,15.21853353, // 666-02-17 h=0.00059 新唐书·历志(麟德历) 回归年=365.24480
1987372.340971,15.21851391, // 729-02-16 h=0.00096 新唐书·历志(大衍历,至德历) 回归年=365.24433
1999653.819126,15.21853078, // 762-10-03 h=0.00093 新唐书·历志(五纪历) 回归年=365.24474
2007445.469786,15.21853518, // 784-02-01 h=0.00059 新唐书·历志(正元历,观象历) 回归年=365.24484
2021324.917146,15.21852625, // 822-02-01 h=0.00022 新唐书·历志(宣明历) 回归年=365.24463
2047257.232342,15.21851965, // 893-01-31 h=0.00015 新唐书·历志(崇玄历) 回归年=365.24447
2070282.898213,15.21842500, // 956-02-16 h=0.00149 旧五代·历志(钦天历) 回归年=365.24220
2073204.872850,15.21851522, // 964-02-16 h=0.00166 宋史·律历志(应天历) 回归年=365.24437
2080144.500926,15.21853078, // 983-02-16 h=0.00093 宋史·律历志(乾元历) 回归年=365.24474
2086703.689664,15.21852349, // 1001-01-31 h=0.00148 宋史·律历志(仪天历) 回归年=365.24456
2095119.531072,15.21852692, // 1024-02-16 h=0.00008 宋史·律历志(崇天历) 回归年=365.24465
2110033.182763,15.21842500, // 1064-12-15 h=0.00669 宋史·律历志(明天历) 回归年=365.24220
2111190.300888,15.21842500, // 1068-02-15 h=0.00149 宋史·律历志(崇天历) 回归年=365.24220
2113731.271005,15.21851567, // 1075-01-30 h=0.00038 李锐补修(奉元历) 回归年=365.24438
2120670.840263,15.21842500, // 1094-01-30 h=0.00149 宋史·律历志 回归年=365.24220
2123973.309063,15.21842500, // 1103-02-14 h=0.00669 李锐补修(占天历) 回归年=365.24220
2125068.997336,15.21847793, // 1106-02-14 h=0.00056 宋史·律历志(纪元历) 回归年=365.24347
2136026.312633,15.21847244, // 1136-02-14 h=0.00088 宋史·律历志(统元历,乾道历,淳熙历) 回归年=365.24334
2156099.495538,15.21842500, // 1191-01-29 h=0.00149 宋史·律历志(会元历) 回归年=365.24220
2159021.324663,15.21842500, // 1199-01-29 h=0.00149 宋史·律历志(统天历) 回归年=365.24220
2162308.575254,15.21846174, // 1208-01-30 h=0.00146 宋史·律历志(开禧历) 回归年=365.24308
2178485.706538,15.21842500, // 1252-05-15 h=0.04606 淳祐历 回归年=365.24220
2178759.662849,15.21844579, // 1253-02-13 h=0.00231 会天历 回归年=365.24270
2185334.020800,15.21842500, // 1271-02-13 h=0.00520 宋史·律历志(成天历) 回归年=365.24220
2187525.481425,15.21842500, // 1277-02-12 h=0.00520 本天历 回归年=365.24220
2188621.191305,15.21843753, // 1280-02-13 h=0.00006 元史·历志(郭守敬授时历) 回归年=365.24250
2321919.49// 1645-02-04
);

// 619-01-21开始16598个朔日修正表 d0=1947168
suoS ="EqoFscDcrFpmEsF2DfFideFelFpFfFfFiaipqti1ksttikptikqckstekqttgkqttgkqteksttikptikq2fjstgjqttjkqttgkqt";
suoS+="ekstfkptikq2tijstgjiFkirFsAeACoFsiDaDiADc1AFbBfgdfikijFifegF1FhaikgFag1E2btaieeibggiffdeigFfqDfaiBkF";
suoS+="1kEaikhkigeidhhdiegcFfakF1ggkidbiaedksaFffckekidhhdhdikcikiakicjF1deedFhFccgicdekgiFbiaikcfi1kbFibef";
suoS+="gEgFdcFkFeFkdcfkF1kfkcickEiFkDacFiEfbiaejcFfffkhkdgkaiei1ehigikhdFikfckF1dhhdikcfgjikhfjicjicgiehdik";
suoS+="cikggcifgiejF1jkieFhegikggcikFegiegkfjebhigikggcikdgkaFkijcfkcikfkcifikiggkaeeigefkcdfcfkhkdgkegieid";
suoS+="hijcFfakhfgeidieidiegikhfkfckfcjbdehdikggikgkfkicjicjF1dbidikFiggcifgiejkiegkigcdiegfggcikdbgfgefjF1";
suoS+="kfegikggcikdgFkeeijcfkcikfkekcikdgkabhkFikaffcfkhkdgkegbiaekfkiakicjhfgqdq2fkiakgkfkhfkfcjiekgFebicg";
suoS+="gbedF1jikejbbbiakgbgkacgiejkijjgigfiakggfggcibFifjefjF1kfekdgjcibFeFkijcfkfhkfkeaieigekgbhkfikidfcje";
suoS+="aibgekgdkiffiffkiakF1jhbakgdki1dj1ikfkicjicjieeFkgdkicggkighdF1jfgkgfgbdkicggfggkidFkiekgijkeigfiski";
suoS+="ggfaidheigF1jekijcikickiggkidhhdbgcfkFikikhkigeidieFikggikhkffaffijhidhhakgdkhkijF1kiakF1kfheakgdkif";
suoS+="iggkigicjiejkieedikgdfcggkigieeiejfgkgkigbgikicggkiaideeijkefjeijikhkiggkiaidheigcikaikffikijgkiahi1";
suoS+="hhdikgjfifaakekighie1hiaikggikhkffakicjhiahaikggikhkijF1kfejfeFhidikggiffiggkigicjiekgieeigikggiffig";
suoS+="gkidheigkgfjkeigiegikifiggkidhedeijcfkFikikhkiggkidhh1ehigcikaffkhkiggkidhh1hhigikekfiFkFikcidhh1hit";
suoS+="cikggikhkfkicjicghiediaikggikhkijbjfejfeFhaikggifikiggkigiejkikgkgieeigikggiffiggkigieeigekijcijikgg";
suoS+="ifikiggkideedeijkefkfckikhkiggkidhh1ehijcikaffkhkiggkidhh1hhigikhkikFikfckcidhh1hiaikgjikhfjicjicgie";
suoS+="hdikcikggifikigiejfejkieFhegikggifikiggfghigkfjeijkhigikggifikiggkigieeijcijcikfksikifikiggkidehdeij";
suoS+="cfdckikhkiggkhghh1ehijikifffffkhsFngErD1pAfBoDd1BlEtFqA2AqoEpDqElAEsEeB2BmADlDkqBtC1FnEpDqnEmFsFsAFn";
suoS+="llBbFmDsDiCtDmAB2BmtCgpEplCpAEiBiEoFqFtEqsDcCnFtADnFlEgdkEgmEtEsCtDmADqFtAFrAtEcCqAE1BoFqC1F1DrFtBmF";
suoS+="tAC2ACnFaoCgADcADcCcFfoFtDlAFgmFqBq2bpEoAEmkqnEeCtAE1bAEqgDfFfCrgEcBrACfAAABqAAB1AAClEnFeCtCgAADqDoB";
suoS+="mtAAACbFiAAADsEtBqAB2FsDqpFqEmFsCeDtFlCeDtoEpClEqAAFrAFoCgFmFsFqEnAEcCqFeCtFtEnAEeFtAAEkFnErAABbFkAD";
suoS+="nAAeCtFeAfBoAEpFtAABtFqAApDcCGJ";
//1645-02-03开始7582个节气修正表
qiS ="EmcFs22AFsckF2tsDtFqEtF1posFdFgiFseFtmelpsEfhkF2anmelpFlF1ikrotcnEqEq2FfqmcDsrFor22FgFrcgDscFs22FgEe";
qiS+="FtE2sfFs22sCoEsaF2tsD1FpeE2eFsssEciFsFnmelpFcFhkF2tcnEqEpFgkrotcnEqrEtFermcDsrE222FgBmcmr22DaEfnaF22";
qiS+="2sD1FpeForeF2tssEfiFpEoeFssD1iFstEqFppDgFstcnEqEpFg11FscnEqrAoAF2ClAEsDmDtCtBaDlAFbAEpAAAAAD2FgBiBqo";
qiS+="BbnBaBoAAAAAAAEgDqAdBqAFrBaBoACdAAf1AACgAAAeBbCamDgEifAE2AABa1C1BgFdiAAACoCeE1ADiEifDaAEqAAFe1AcFbcA";
qiS+="AAAAF1iFaAAACpACmFmAAAAAAAACrDaAAADG0";

suoS = qiSuo_jieya(suoS); //定朔修正表解压
qiS = qiSuo_jieya(qiS); //定朔修正表解压

//低精度定气朔计算(仍比古代日历精准很多)
function suo_low(W){ //低精度定朔计算,在2000年至600,误差在2小时以内
var v = 7771.37714500204;
var t = ( W + 1.08472 )/v, L;
t -= ( -0.0000331*t*t
+ 0.10976 *Math.cos( 0.785 + 8328.6914*t)
+ 0.02224 *Math.cos( 0.187 + 7214.0629*t)
- 0.03342 *Math.cos( 4.669 + 628.3076*t ) )/v
+ (32*(t+1.8)*(t+1.8)-20)/86400/36525;
return t*36525 + 8/24;
}
function qi_low(W){ //最大误差小于30分钟,平均5分
var t,L,v= 628.3319653318;
t = ( W - 4.895062166 )/v; //第一次估算,误差2天以内
t -= ( 53*t*t + 334116*Math.cos( 4.67+628.307585*t) + 2061*Math.cos( 2.678+628.3076*t)*t )/v/10000000; //第二次估算,误差2小时以内

L = 48950621.66 + 6283319653.318*t + 53*t*t //平黄经
+334166 * Math.cos( 4.669257+ 628.307585*t) //地球椭圆轨道级数展开
+3489 * Math.cos( 4.6261 + 1256.61517*t ) //地球椭圆轨道级数展开
+2060.6 * Math.cos( 2.67823 + 628.307585*t ) * t //一次泊松项
- 994 - 834*Math.sin(2.1824-33.75705*t); //光行差与章动修正

t -= (L/10000000 -W )/628.332 + (32*(t+1.8)*(t+1.8)-20)/86400/36525;
return t*36525 + 8/24;
}
function qi_high(W){ //较高精度气
var t = XL.S_aLon_t2(W)*36525;
t = t - JD.deltatT2(t);
var v = ( (t+0.5) %1 ) * 86400;
if(v<600 || v >86400-600) t = XL.S_aLon_t(W)*36525 - JD.deltatT2(t);
return t + 8/24;
}
function suo_high(W){ //较高精度朔
var t = XL.MS_aLon_t2(W)*36525;
t = t - JD.deltatT2(t);
var v = ( (t+0.5) %1 ) * 86400;
if(v<600 || v >86400-600) t = XL.MS_aLon_t(W)*36525 - JD.deltatT2(t);
return t + 8/24;
}
function getQS1(jd,qs){ //jd应靠近所要取得的气朔日,qs='气'时,算节气的儒略日
jd += 2451545;
var i,D,n;
var B=suoKB,pc=14; if(qs=='气') B=qiKB,pc=7;
var f1=B[0]-pc, f2=B[B.length-1]-pc, f3=2436935;

if( jd=f3 ){ //平气朔表中首个之前,使用现代天文算法。1960.1.1以后,使用现代天文算法
if(qs=='气') return Math.floor( qi_high ( Math.floor((jd+pc-2451259)/365.2422*24) * Math.PI/12 ) +0.5 ); //2451259是1999.3.21,太阳视黄经为0,春分.定气计算
else return Math.floor( suo_high( Math.floor((jd+pc-2451551)/29.5306) * Math.PI*2 ) +0.5 ); //2451551是2000.1.7的那个朔日,黄经差为0.定朔计算
}

if( jd>=f1 && jd=f2 && jdjd) W-=365.2422;
for(i=0;i<25;i++) A[i]=getQS1(W+15.2184*i,'气'); //25个节气时刻(北京时间),从冬至开始到下一个冬至以后

//今年"首朔"的日月黄经差w
w = getQS1(A[0],'朔'); //求较靠近冬至的朔日
if(w>A[0]) w -= 29.53;

//该年所有朔,包含14个月的始末
for(i=0;i<15;i++) B[i]=getQS1(w+29.5306*i,'朔');

//确定闰月
for(i=0;i<14;i++) this.ym[i]=i; //月序初始化
this.leap = 0;
if( B[13] <= A[24] ){ //第13月的月末没有超过冬至(不含冬至),说明今年含有13个月
for(i=1; B[i+1]>A[2*i] && i<13; i++); //在13个月中找第1个没有中气的月份
this.leap = i;
for(;i<14;i++) this.ym[i]--;
}

//月大小及名称转换
for(i=0;i<14;i++){
this.dx[i] = this.HS[i+1]-this.HS[i];
var Dm = this.HS[i]+J2000, v2=this.ym[i]; //Dm初一的儒略日,v2为月建序号
var mc = this.ymc[v2%12]; //默认月建对应的月名称:建子十一,建丑十二,建寅为正……
if(Dm>=1807724 && Dm<=1808699){ //237.4.12至239.12.13月建变为建子为十二,其它顺推
mc = this.ymc[(v2+1)%12];
if(Dm==1808699) mc='拾贰'; //239.12.13为十二月,为避免两个连续十二月,此处改名
}
else if( Dm>=1999349 && Dm<=1999467 ){ //761.12.2 至762.3.30 建子为正月,其它顺推
mc = this.ymc[(v2+2)%12];
}
else if( Dm>=1973067 && Dm<=1977112 ){ //689.12.18至701.1.14建子为正月,建寅为一月,其它不变
if(v2==0||v2==12) mc="正";
if(v2==2) mc='一';
}
this.ym[i]=mc;
if((i==this.leap) && i) this.nu[i]='闰'; else this.nu[i]='';
}
A.mangzhong=A[11], A.xiaoshu=A[13], A.liqiu=A[15], A.lichun=A[3]; //保存芒种,小暑,立秋,立春
},
getMonthStartEndDay:function(By,Bm)
{
var i,j,k,Bd0,Bdn;
var lun=new Array();
if(!lun.length) { for(var i=0;i<2;i++) lun[i] = new Array(); }

JD.h=12, JD.m=0, JD.s=0.1;
JD.Y=By; JD.M=Bm; JD.D=1; Bd0 = int2(JD.toJD()) - J2000; //公历月首,中午
JD.M++; if(JD.M>12) JD.Y++,JD.M=1; Bdn = int2(JD.toJD()) - J2000 - Bd0; //本月天数(公历)下月第一天减本月第一天。
// alert(lun);
// lun.w0= (Bd0 + J2000 +1)%7; //本月第一天的星期
// lun.y = By; //公历年份
// lun.m = Bm; //公历月分
// lun.d0 =Bd0;
// lun.dn= Bdn;
//alert(lun.length);
var D,w,ob,ob2;
// for(i=0,j=0;iob2.Ldn)//洋历月末是月初的农历下月了
{
endDayLi = lDInt-ob2.Ldn-1;
ob.Lmc = ob2.Lmc2;
if(ob2.Lmc2==ob2.Lmc)
{
ob.Lleap= ob2.Lleap
}
ob.Ldc = this.rmc[endDayLi];//月末的农历日名
}

return lun;
},
calc2:function(By,Bm,sw){ //返回公历某一个月的'公农回'三合历
var i,j,k,c,Bd0,Bdn,lun=this.lun;
if(!this.lun.length) { for(var i=0;i<31;i++) this.lun[i] = new Array(); }

//日历物件初始化
JD.h=12, JD.m=0, JD.s=0.1;
JD.Y=By; JD.M=Bm; JD.D=1; Bd0 = int2(JD.toJD()) - J2000; //公历月首,中午
JD.M++; if(JD.M>12) JD.Y++,JD.M=1; Bdn = int2(JD.toJD()) - J2000 - Bd0; //本月天数(公历)下月第一天减本月第一天。

lun.w0= (Bd0 + J2000 +1)%7; //本月第一天的星期
lun.y = By; //公历年份
lun.m = Bm; //公历月分
lun.d0 =Bd0;
lun.dn= Bdn;

//所属公历年对应的农历干支纪年
c = int2((Bd0-Bm*30+150)/365.2422) + 16 + 9000;
lun.Ly = Lunar.Gan[c%10]+Lunar.Zhi[c%12]; //干支纪年
lun.ShX = Lunar.ShX[c%12]; //该年对应的生肖

//年号纪年处理
lun.nianhao = new getNH(lun.y);

var D,w,ob,ob2;

//提取各日信息

//处理公历月的所有天信息
for(i=0,j=0;i=0;j--) if(this.ym[j]=="正月") break;
//D=j<0 ? this.HS[2]-365 : this.HS[j]+5810; //该年春节与1984年平均春节(立春附近)相差天数估计
D = this.ZQ.lichun + (ob.d0
公元年月

=this.ZQ[2*mk+1]) mk++; //相对大雪的月数计算

/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
/**算农历都是相对于1998年12月7(大雪)造一个显眼的标记在这里********************/
D = mk + int2( (this.ZQ[12]+390)/365.2422 )*12 + 900000; //相对于1998年12月7(大雪)的月数,900000为正数基数
ob.Lmonth = D%12;
ob.Lmonth2 = this.Gan[D%10]+this.Zhi[D%12];

//纪日,2000年1月7日起算
D = (ob.d0 - 6 + 9000000)%60;
ob.Lday2 = this.Gan[D%10]+this.Zhi[D%12];

//纪时,2000年1月2日起算
D = (ob.d0 - 1)*12 + 90000000;
for(k=0,c='';k<12;k++){
w = (k*2+23)%24; if(w<10) w='0'+w; c+=w+'-';
w = k*2+1; if(w<10) w='0'+w; c+=w;
c += this.Gan[(D+k)%10]+this.Zhi[(D+k)%12]+'时 ';
if(k%3==2) c+='
';
}
ob.Ltime2=c;

//节日
this.getDayName(ob);

//星座
mk = int2( (ob.d0-this.ZQ[0]-15)/30.43685 ); if( mk<11 && ob.d0>=this.ZQ[2*mk+2] ) mk++; //星座所在月的序数,(如果j=13,ob.d0不会超过第14号中气)
ob.XiZ = this.XiZ[(mk+12)%12]+'座';
//回历
this.getHuiLi(ob);
}

//以下是月相与节气的处理
if(!sw) return;
var d, xn, jd2= Bd0+JD.deltatT2(Bd0)-8/24;
//月相查找
w = XL.MS_aLon( jd2/36525,10,3 );
w = int2( (w-0.78)/Math.PI*2 ) * Math.PI/2;
do {
d = suo_accurate(w);
D = int2(d+0.5);
xn = int2(w/pi2*4+4000000.01)%4;
w += pi2/4;
if(D>=Bd0+Bdn) break;
if(D=Bd0+Bdn) break;
if(D20 && r.cur_xz<=30 && w=='庚') r.B += '初伏 ';
if(r.cur_xz>30 && r.cur_xz<=40 && w=='庚') r.B += '中伏 ';
if(r.cur_lq>0 && r.cur_lq<=10 && w=='庚') r.B += '末伏 ';
if(r.cur_mz>0 && r.cur_mz<=10 && w=='丙') r.B += '入梅 ';
if(r.cur_xs>0 && r.cur_xs<=12 &&w2=='未') r.B += '出梅 ';

r.PB = false;

//////////
//生日
//////////
if(this.lBir==null||this.lBir==undefined)
{
return;
}
var i = 0;

//for( i in this.lBir)
for( ;i
=50&&age%10==0)//50以上的整数生日称大寿。
{
birYearStr += '大寿';
}
else if(age>50)
{
birYearStr += '岁寿辰';
}
else if(age==0)
{
birYearStr = '出生';
}
else
{
birYearStr += '岁生日';
}
if(age>=0)//因为这里用了正则表达式。。。。前面正则表达式的匹配内容被覆盖了!!
{
var ageNameStr = this.getAgeNames(age,sexCode);
if(ageNameStr!='')
{
birYearStr += '(' + ageNameStr + ')';
}
}
birMonIndex = parseInt(group1,10)%100;
}
else
{
birMonIndex = parseInt(group1,10);
birYearStr += '生日'
}
if(birMonIndex>10)//月份数组是 ymc:new Array('十一','十二','正','二','三','四','五','六','七','八','九','十'), //月名称,建寅
{
birMonIndex = Number(birMonIndex) - 11;
}
else
{
birMonIndex = Number(birMonIndex) + 1;//
}
// if(r.d==1)
// alert(this.lBir[i] + ' ' + birMonIndex +' '+(group2-1)+' '+ this.ymc[birMonIndex]+' ' + this.rmc[group2-1]);
if(r.m==(birMonIndex-1)&&r.d==parseInt(group2,10))
{
r.B += group4 + birYearStr + ' ';
r.PB = true;
}
}

else if(this.lBir[i].match(/^(\d{2,6})(\d{2})([\s\*])(.+?)([FM])?$/i))
{
var birYear = -1;
var birYearStr = '';
var birMonIndex = -1;
var age = 0;
var group1 = RegExp.$1;
var group2 = RegExp.$2;
var group3 = RegExp.$3;
var group4 = RegExp.$4;
var sexCode = RegExp.$5;
//下面要用到正则表达式。
//所以得很把这个正则表达式的结果先拿出来。
if(group1.length==6)
{
birYear = Math.floor(parseInt(group1,10)/100);
age = (parseInt(r.y,10)-birYear);
if(age<0) continue;//如果出在出生之前的年代就不显示生日了

birYearStr += (parseInt(r.y,10)-birYear);
if(age>=50&&age%10==0)//50以上的整数生日称大寿。
{
birYearStr += '大寿';
}
else if(age>50)
{
birYearStr += '岁寿辰';
}
else if(age==0)
{
birYearStr = '出生';
}
else
{
birYearStr += '岁生日';
}
if(age>=0)//因为这里用了正则表达式。。。。前面正则表达式的匹配内容被覆盖了!!
{
var ageNameStr = this.getAgeNames(age,sexCode);
if(ageNameStr!='')
{
birYearStr += '(' + ageNameStr + ')';
}
}
birMonIndex = parseInt(group1,10)%100;
}
else
{
birMonIndex = parseInt(group1,10);
birYearStr += '生日'
}
if(birMonIndex>10)//月份数组是 ymc:new Array('十一','十二','正','二','三','四','五','六','七','八','九','十'), //月名称,建寅
{
birMonIndex = Number(birMonIndex) - 11;
}
else
{
birMonIndex = Number(birMonIndex) + 1;//
}
// if(r.d==1)
// alert(this.lBir[i] + ' ' + birMonIndex +' '+(group2-1)+' '+ this.ymc[birMonIndex]+' ' + this.rmc[group2-1]);
if(r.Lmc==this.ymc[birMonIndex] && r.Ldc==this.rmc[parseInt(group2,10)-1] && r.Lleap!='闰')
{
r.B += group4 + birYearStr + ' ';
r.PB = true;
// alert(r.B);
// r.A += group4 + birYearStr + ' ';
}
}//end if
}//end for
},
getBirDetail:function(birStr){

},
converGBToInt:function(GBInt)
{//将农历用到的数字转换成整数
var resultStr = GBInt;
resultStr = resultStr.replace(/^(正)$/gi,'1');
resultStr = resultStr.replace(/^(初)/gi,'');
resultStr = resultStr.replace(/(日)/gi,'');
resultStr = resultStr.replace(/(月)/gi,'');
resultStr = resultStr.replace(/(大)/gi,'');
resultStr = resultStr.replace(/(年)/gi,'');
resultStr = resultStr.replace(/^(冬)$/gi,'11');
resultStr = resultStr.replace(/(一)/gi,'1');
resultStr = resultStr.replace(/(二)/gi,'2');
resultStr = resultStr.replace(/(三)/gi,'3');//前三个有可能出现在多个位置
resultStr = resultStr.replace(/(四)$/gi,'4');
resultStr = resultStr.replace(/(五)$/gi,'5');
resultStr = resultStr.replace(/(六)$/gi,'6');
resultStr = resultStr.replace(/(七)$/gi,'7');
resultStr = resultStr.replace(/(八)$/gi,'8');
resultStr = resultStr.replace(/(九)$/gi,'9');
resultStr = resultStr.replace(/^(十)$/gi,'10');//只有一个十的话就是10一位变两位
resultStr = resultStr.replace(/(.)(十)$/gi,'$10');//后面的十换成0$1表是前面的数,0是十
resultStr = resultStr.replace(/(.)(十)(.)$/gi,'$1$3');//中间的十不要
resultStr = resultStr.replace(/(廿)$/gi,'20');//一位变两位
resultStr = resultStr.replace(/^(廿)/gi,'2');//
resultStr = resultStr.replace(/^(十)/gi,'1');
// alert(resultStr);
return Number(resultStr);
},
searchLdayInMonth:function (year,month,day)//反回一个表示年月的整数
{//查找农历天所在的洋历月份
var i=0;
var lun, ob;//Lunar.lun, ob; //日历物件
var dayInt = Number(month*100)+Number(day);//用一个整数表示月日
while(i<=19)//最多找19年~不知道有没有可能找不到的....
{ //直接从与农历日期对应的洋历月开始查!
if(month>=13)
{year++;month=1;}
i++;
//Lunar.calc2(year,month,1);
lun = Lunar.getMonthStartEndDay(year,month);
ob = lun[0];
var firstDayInt = Number(Lunar.converGBToInt(ob.Lmc)*100)
+Number(Lunar.converGBToInt(ob.Ldc));

//该洋历月最后一天的农历日(没考虑闰月情况)
// alert(lun[lun[0].dn-1].Lmc);
// alert(ob.Lmc);
var lastDayInt = Number(Lunar.converGBToInt(lun[lun.length-1].Lmc)*100)
+Number(Lunar.converGBToInt(lun[lun.length-1].Ldc));

//考虑闰月情况)如果月末是闰月而且月初不是闰月就给月末加一个月!
if(lun[lun.length-1].Lleap!=""&&ob.Lleap=="")
{
lastDayInt + 100;//加一个月//
}
//如果月末小于月初就加1年!!!//正月算成13月!!!....
if(lastDayInt200)
{
lastDayInt+=1200;//比如这个月最后一天是正月初五那有就是105月初肯定是12月(12XX)~~~那就把前面的加上1200变成13XX
//alert(lastDayInt);
}
else if(lastDayIntLunar.ZQ[24]) break; //已包含下一年的冬至
s1 = Lunar.nu[i]; if(!s1) s1 = '·';
s1 += Lunar.ym[i]; if(s1.length<3) s1 += '月';
s1 += Lunar.dx[i]>29?'大':'小';
s1 += ' '+JD.setFromJD_str(Lunar.HS[i]+J2000).substr(6,5);

v = suo_accurate2(Lunar.HS[i]);
s2 = '('+ JD.setFromJD_str(v+J2000).substr(9,11)+')';
if(int2(v+0.5)!=Lunar.HS[i]) s2 = ''+s2+'';
s1 += s2;

for(j=0;j<24;j++){
if(Lunar.ZQ[j]=Lunar.HS[i+1]) continue;
s1 += ' '+Lunar.jqmc[j]+JD.setFromJD_str(Lunar.ZQ[j]+J2000).substr(6,5);

v = qi_accurate2(Lunar.ZQ[j]);
s2 = '('+ JD.setFromJD_str(v+J2000).substr(9,11)+')';
if(int2(v+0.5)!=Lunar.ZQ[j]) s2 = ''+s2+'';
s1 += s2;
}
s += s1 + '
';
}
return y+'年
'+s;
}

function nianLi2HTML(y){ //html年历生成
var i,j,s='', s1,s2,v,v2;
Lunar.calc( int2((y-2000)*365.2422+180) );
for(i=0;i<14;i++){
if(Lunar.HS[i+1]>Lunar.ZQ[24]) break; //已包含下一年的冬至
s1 = Lunar.nu[i]; if(!s1) s1 = '·';
s1 += Lunar.ym[i]; if(s1.length<3) s1 += '月';
s1 += Lunar.dx[i]>29?'大':'小';
v = Lunar.HS[i]+J2000;
s1 += ' '+Lunar.Gan[(v+9)%10]+Lunar.Zhi[(v+1)%12];
s1 += ' '+JD.setFromJD_str(v).substr(6,5);

for(j=0;j<24;j++){
if(Lunar.ZQ[j]=Lunar.HS[i+1]) continue;
v2 = Lunar.ZQ[j]+J2000;
s1 += ' '+Lunar.rmc[v2-v]+Lunar.Gan[(v2+9)%10]+Lunar.Zhi[(v2+1)%12];
s1 += Lunar.jqmc[j]+JD.setFromJD_str(Lunar.ZQ[j]+J2000).substr(6,5);
}
s += s1 + '
';
}
return y+'年
'+s;
}

var SQv=new Array(
'-1200 安尼威土克、瓜甲兰;国际换日线',
'-1100 中途岛、萨摩亚群岛;萨摩亚',
'-1000 夏威夷;夏威夷',
'-0900*阿拉斯加;阿拉斯加',
'-0800*太平洋时间(美加)、提亚纳;太平洋',
'-0700*亚历桑那;美国山区',
'-0700*山区时间(美加);美加山区',
'-0600*萨克其万(加拿大);加拿大中部',
'-0600*墨西哥市、塔克西卡帕;墨西哥',
'-0600*中部时间(美加);美加中部',
'-0500*波哥大、里玛;南美洲太平洋',
'-0500*东部时间(美加);美加东部',
'-0500*印第安纳(东部);美东',
'-0400*加拉卡斯、拉帕兹;南美洲西部',
'-0400*大西洋时间 加拿大);大西洋',
'-0330 新岛(加拿大东岸);纽芬兰',
'-0300 波西尼亚;东南美洲',
'-0300 布鲁诺斯爱丽斯、乔治城;南美洲东部',
'-0200*大西洋中部;大西洋中部',
'-0100*亚速尔群岛、维德角群岛;亚速尔',
'+0000 格林威治时间、都柏林、爱丁堡、伦敦;英国夏令',
'+0000 莫洛维亚(赖比瑞亚)、卡萨布兰卡;格林威治标准',
'+0100 巴黎、马德里;罗马',
'+0100 布拉格, 华沙, 布达佩斯;中欧',
'+0100 柏林、斯德哥尔摩、罗马、伯恩、布鲁赛尔、维也纳;西欧',
'+0200 以色列;以色列',
'+0200*东欧;东欧',
'+0200*开罗;埃及',
'+0200*雅典、赫尔辛基、伊斯坦堡;GFT',
'+0200*赫拉雷、皮托里;南非',
'+0300*巴格达、科威特、奈洛比(肯亚)、里雅德(沙乌地);沙乌地阿拉伯',
'+0300*莫斯科、圣彼得堡、贺占、窝瓦格瑞德;俄罗斯',
'+0330*德黑兰;伊朗',
'+0400*阿布达比(东阿拉伯)、莫斯凯、塔布理斯(乔治亚共和);阿拉伯',
'+0430*喀布尔;阿富汗',
'+0500 伊斯兰马巴德、克洛奇、伊卡特林堡、塔须肯;西亚',
'+0530 孟买、加尔各答、马垂斯、新德里、可伦坡;印度',
'+0600 阿马提、达卡;中亚',
'+0700 曼谷、亚加达、胡志明市;曼谷',
'+0800 北京、重庆、黑龙江;中国',
'+0900 东京、大阪、扎幌、汉城、亚库兹(东西伯利亚);东京',
'+0930 达尔文;澳洲中部',
'+1000 布里斯本、墨尔本、席德尼;席德尼',
'+1000 霍巴特;塔斯梅尼亚',
'+1000 关岛、莫斯比港、海威;西太平洋',
'+1100*马哥大、所罗门群岛、新卡伦多尼亚;太平洋中部',
'+1200 威灵顿、奥克兰;纽西兰',
'+1200 斐济、肯加塔、马歇尔群岛;斐济');

年号





年历1

年历2

速查生日

许剑伟 2008年7月设计. 阿剑工作室 All Rights Reserved, © 2008
abc

//==========================
//页面生成有关的函数
//==========================
/********************
当前时间初始化
*********************/
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 = '月球的当日真分点地心坐标
';
s += '视黄经 ' + rad2str(z[0],0);
s += '视黄纬 ' + rad2str(z[1],0)+'
';
s += '视赤经 ' + rad2str(z2[0],1);
s += '视赤纬 ' + rad2str(z2[1],0)+'
';
s += '径距离 ' + int2(z[2]+0.5)+'千米 ';
s += '平时角 ' + rad2str(ShiJ,0) + '
';
s += "方位角 " + rad2str(z3[0],0);
s += "高度角 " + rad2str(z3[1],0) + "
";
s += "亮面比例 " + ( int2(XL.moonIll(T)*100000+0.5)/1000 )+'% ';
s += "站心视半径 " + (int2(XL.moonRad(z[2],z3[1])/60*100+0.5)/100)+"'
";

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 += '太阳的当日真分点地心坐标
';
s += '视黄经 ' + rad2str(z[0],0);
s += '视黄纬 ' + rad2str(z[1],0) + '
';
s += '视赤经 ' + rad2str(z2[0],1);
s += '视赤纬 ' + rad2str(z2[1],0) + '
';
s += '径距离 ' + (int2(z2[2]*1000000+0.5)/1000000) + 'AU ';
s += '平时角 ' + rad2str(ShiJ,0) + '
'; //天顶到天体视赤经的差
s += '方位角 ' + rad2str(z3[0],0);
s += '高度角 ' + rad2str(z3[1],0) + '
';

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 + '
';
s += '本地平太阳时 ' + taiYangShi(jd,L,0)+' 真太阳时 '+ taiYangShi(jd,L,sc)+'
';

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)+'
';
s += '日出 '+ob.s +' 日上中天 '+ob.z +'
';
s += '日落 '+ob.j +' 月上中天 '+ob.Mz+'
';
s += '月出 '+ob.Ms+' 晨光开始 '+ob.c +'
';
s += '月落 '+ob.Mj+' 昏影终止 '+ob.h +'
';
s += '昼长 '+ob.sj+' 光照时间 '+ob.ch+'
';
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;
Op.innerText=t;
//sel.add(Op);
sel.appendChild(Op);
}
var Cal_zdzb = document.getElementById('Cal_zdzb');
var Cal2 = document.getElementById('Cal2');
var Cal5 = document.getElementById('Cal5');
var Clock2_dq = document.getElementById('Clock2_dq');
var Cal6 = document.getElementById('Cal6');
var Cal3 = document.getElementById('Cal3');
var Cal4 = document.getElementById('Cal4');
var YMBG = document.getElementById('YMBG');
var Clock1 = document.getElementById('Clock1');
var Clock2 = document.getElementById('Clock2');
var Cal_zb = document.getElementById('Cal_zb');
var Cal_pan = document.getElementById('Cal_pan');
var Cal_pan_in = document.getElementById('Cal_pan_in');//
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; iw) 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?'':'¤');
}
for(i=0;i29?'大 ':'小 ') + ob.Ldc + '日
';
s += ob.Lyear2+'年 '+ob.Lmonth2+'月 '+ob.Lday2+'日
';
s += '回历['+ob.Hyear+'年'+ob.Hmonth+'月'+ob.Hday+'日]
';
if(ob.yxmc) s += ob.yxmc+' '+ob.yxsj+' ';
if(ob.jqmc) s += '定'+ob.jqmc+' '+ob.jqsj+'
';
else { if(ob.Ljq) s += ob.Ljq+'
';}
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.style.position = "absolute";

Cal_pan.style.display = ""; //先显示再传值屏幕流畅

Cal_pan_in.innerHTML = s;

//长度格式("100":错)firefox下必须为"100px"

Cal_pan.style.left = (event.x?event.x:event.pageX)+(document.body?document.body.scrollLeft:document.documentElement.scrollLeft)-80 + "px";
Cal_pan.style.top = (event.y?event.y:event.pageY)+(document.body?document.body.scrollTop:document.documentElement.scrollTop) +((ob.weeki+2n+1) return s.substr(0,n)+'..';
return s;
}

function getLunar(event){ //月历页面生成
var i,j, c,c2, cr="",isM;
var lun = Lunar.lun, ob; //日历物件
var By = Cal_y.value-0;
var Bm = Cal_m.value-0;
Lunar.calc2(By,Bm,1); //农历计算
//年份处理
Cal2.innerHTML = lun.nianhao.nh+' 农历'+lun.Ly+'年【'+lun.ShX+'年】'; //干支纪年
//月历处理
var ta0='';
for(i=0;i'+ob.Ljq+''; //取节气
if(ob.A) c += '' +strTu(ob.A,4)+'';
if(!c && ob.B) c = ''+strTu(ob.B,4)+'';
if(!c && ob.Ldc=="初一") c = ob.Lleap + ob.Lmc +'月'+ (ob.Ldn==30?'大':'小'); //农历历月(闰月及大小等)
if(!c) c = ob.Ldc; //取农历日名称

if(ob.yxmc=="朔") isM = '●'; //取月相
if(ob.yxmc=="望") isM = '●'; //取月相
if(ob.jqmc) isM += '◆'; //定气标记

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

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

cr += ''+c2+'
'+isM+c+'';
if(i==lun.dn-1) { for(j=0;j<6-ob.week;j++) cr+=''; } //末行后面的空单元格
if(i==lun.dn-1||ob.week==6) ta0+=''+cr+'', cr="";
}//end For
Cal3.innerHTML=''+ta0+'
';

var b1='月首:',b2='朔望:',b3='弦月:',b4='定气:';
for(i=0;i=9999) { alert('到顶了!'); return; }
Cal_y.value = y+1;
}
getLunar();
}
function changeMonth(ud){ //跳到上(或下)下月
var y,m;
y = Cal_y.value-0;
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 = 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 = y+1;
else Cal_m.value = m+1;
}
if(ud==2){
Cal_y.value = nowY;
Cal_m.value = nowM;
}
getLunar();
}
//////////
//生日
//////////
function searchBir(birthdayStr)
{//查所在年某人的生日
// var birthday = '0527[Y]';
var ylMonth,birthday;
if(birthdayStr.length==5&&birthdayStr.substr(4,1)=='Y')
{
birthday=birthdayStr.substr(0,4);
ylMonth=Cal_y.value*100 + Math.floor(birthday/100);
}
else{
birthday=birthdayStr;
var mon = Math.floor(birthday/100);
var day = birthday%100;
var year = Cal_y.value;//new Date().getFullYear();

ylMonth = Lunar.searchLdayInMonth(year-0,mon,day);//找到生日所在的农历月份

}
if(birthday<=0)
{
return;
}
//要能输入数字~~~
Cal_y.value = Math.floor(ylMonth/100);
Cal_m.value = ylMonth%100;

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(); //触发时钟

document.body.onkeypress = function () {setFocus();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: