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

📄 lunar.js

📁 返回 第一章 关于寿星万年历 第二章 公历与儒略日 第三章 回历计算 第四章 天文坐标 第五章 近现代农历的天文学性质及其规则 第六章 离散序列的直线拟合算法
💻 JS
📖 第 1 页 / 共 3 页
字号:
   d = qi_accurate(w);
   D = int2(d+0.5);
   xn = int2(w/pi2*24+24000006.01)%24;
   w += pi2/24;
   if(D>=Bd0+Bdn) break;
   if(D<Bd0) continue;
   ob = this.lun[D-Bd0];
   ob.jqmc = this.jqmc[xn]; //取得节气名称
   ob.jqjd = d;
   ob.jqsj = JD.timeStr(d);
  } while(D+12<Bd0+Bdn);
 },

 getHuiLi:function(ob){ //回历计算
  //以下算法使用Excel测试得到,测试时主要关心年临界与月临界
  var z,y,m,d;
  d = ob.d0 + 503105;       z = int2((d+0.1)/10631);   //10631为一周期(30年)
  d -= z*10631;             y = int2((d+0.5)/354.366); //加0.5的作用是保证闰年正确(一周中的闰年是第2,5,7,10,13,16,18,21,24,26,29年)
  d -= int2(y*354.366+0.5); m = int2((d+0.11)/29.51);  //分子加0.11,分每加0.01的作用是第354或355天的的月分保持为12月(m=11)
  d -= int2(m*29.51+0.5);
  ob.Hyear = z*30+y+1;
  ob.Hmonth= m+1;
  ob.Hday  = d+1;
 },

 sFtv:new Array(), //国历节日
 wFtv:new Array( //某月的第几个星期几,如第2个星期一指从月首开始顺序找到第2个“星期一”
  '0150I世界麻风日', //一月的最后一个星期日(月倒数第一个星期日)
  '0520.国际母亲节',
  '0530I全国助残日',
  '0630.父亲节',
  '0730.被奴役国家周',
  '0932I国际和平日',
  '0940.国际聋人节 世界儿童日',
  '0950I世界海事日',
  '1011.国际住房日',
  '1013I国际减轻自然灾害日(减灾日)',
  '1144I感恩节'
 ),

 getDayName:function(r){ //取某日节日
  var m0=(r.m<10?'0':'')+r.m;
  var d0=(r.d<10?'0':'')+r.d;
  var i,j,s,s2,type;

  r.A = r.B = r.C = ''; r.Fjia = 0;
  if(r.week==0||r.week==6) r.Fjia = 1; //星期日或星期六放假
  //按农历日期查找重量点节假日
  if(r.Lmc=='正' && r.Lleap!='闰'){ //取农历节日名称(放假)
   if(r.Ldc=='初一') r.A += '春节 ',     r.Fjia = 1;
   if(r.Ldc=='初二') r.B += '大年初二 ', r.Fjia = 1;
   if(r.Ldc=='初三') r.B += '大年初三 ', r.Fjia = 1;
  }
  if(r.Lmc=='五' && r.Ldc=='初五' && r.Lleap!='闰') r.A += '端午节 ', r.Fjia = 1;
  if(r.Lmc=='八' && r.Ldc=='十五' && r.Lleap!='闰') r.A += '中秋节 ', r.Fjia = 1;

  //按农历日期查找主要节假日
  if(r.Lmc=='正'  && r.Ldc=='十五' && r.Lleap!='闰') r.A += '元宵节 ';
  if(r.Lmc=='七'  && r.Ldc=='初七' && r.Lleap!='闰') r.B += '七夕情人节 ';
  if(r.Lmc=='七'  && r.Ldc=='十五' && r.Lleap!='闰') r.B += '七月半(鬼节) ';
  if(r.Lmc=='九'  && r.Ldc=='初九' && r.Lleap!='闰') r.B += '重阳节 ';
  if(r.Lmc=='十二'&& r.Ldc=='初八' && r.Lleap!='闰') r.B += '腊八节 ';
  if(r.Lmc=='十二'&& r.Lmc2=="正"){
   if(r.Ldc=="三十" && r.Ldn==30) r.B += '除夕 ';
   if(r.Ldc=="廿九" && r.Ldn==29) r.B += '除夕 ';
   if(r.Ldc=="廿三") r.B += '小年';
  }

  //按公历日期查找
  if(!this.sFtv.length){//生成节日表,#表示放假日,I表示重要节日或纪念日

  s+='01#元旦|'; //1月
  s+='02I世界湿地日,10.国际气象节,14I情人节|';//2月

  s+='01.国际海豹日,03.全国爱耳日,05.1963-9999学雷锋纪念日,08I妇女节,12I植树节,12.1925-9999孙中山逝世纪念日,14.国际警察日,'; //3月
  s+='15I1983-9999消费者权益日,17.中国国医节,17.国际航海日,21.世界森林日,21.消除种族歧视国际日,21.世界儿歌日,22I世界水日,';
  s+='23I世界气象日,24.1982-9999世界防治结核病日,25.全国中小学生安全教育日,30.巴勒斯坦国土日|';

  s+='01I1564-9999愚人节,01.全国爱国卫生运动月(四月),01.税收宣传月(四月),07I世界卫生日,22I世界地球日,23.世界图书和版权日,24.亚非新闻工作者日|'; //4月

  s+='01#1889-9999劳动节,04I青年节,05.碘缺乏病防治日,08.世界红十字日,12I国际护士节,15I国际家庭日,17.国际电信日,18.国际博物馆日,'; //5月
  s+='20.全国学生营养日,23.国际牛奶日,31I世界无烟日|';

  s+='01I1925-9999国际儿童节,05.世界环境保护日,06.全国爱眼日,17.防治荒漠化和干旱日,23.国际奥林匹克日,25.全国土地日,26I国际禁毒日|'; //6月

  s+='01I1997-9999香港回归纪念日,01I1921-9999中共诞辰,01.世界建筑日,02.国际体育记者日,07I1937-9999抗日战争纪念日,11I世界人口日,30.非洲妇女日|'; //7月

  s+='01I1927-9999建军节,08.中国男子节(爸爸节),15I1945-9999抗日战争胜利纪念|'; //8月

  s+='08.1966-9999国际扫盲日,08.国际新闻工作者日,09.毛泽东逝世纪念,10I中国教师节,14.世界清洁地球日,'; //9月
  s+='16.国际臭氧层保护日,18I九·一八事变纪念日,20.国际爱牙日,27.世界旅游日,28I孔子诞辰|';

  s+='01#1949-9999国庆节,01.世界音乐日,01.国际老人节,02#1949-9999国庆节假日,02.国际和平与民主自由斗争日,03#1949-9999国庆节假日,'; //10月
  s+='04.世界动物日,06.老人节,08.全国高血压日,08.世界视觉日,09.世界邮政日,09.万国邮联日,10I辛亥革命纪念日,10.世界精神卫生日,';
  s+='13.世界保健日,13.国际教师节,14.世界标准日,15.国际盲人节(白手杖节),16.世界粮食日,17.世界消除贫困日,22.世界传统医药日,24.联合国日,31.世界勤俭日|';

  s+='07.1917-9999十月社会主义革命纪念日,08.中国记者日,09.全国消防安全宣传教育日,10.世界青年节,11.国际科学与和平周(本日所属的一周),12.孙中山诞辰纪念日,';
  s+='14.世界糖尿病日,17.国际大学生节,17.世界学生节,20.彝族年,21.彝族年,21.世界问候日,21.世界电视日,22.彝族年,29.国际声援巴勒斯坦人民国际日|'; //11月

  s+='01I1988-9999世界艾滋病日,03.世界残疾人日,05.国际经济和社会发展志愿人员日,08.国际儿童电视日,09.世界足球日,10.世界人权日,'; //12月
  s+='12I西安事变纪念日,13I南京大屠杀(1937年)纪念日,20.澳门回归纪念,21.国际篮球日,24I平安夜,25I圣诞节,26.毛泽东诞辰纪念';

   this.sFtv=s.split('|');
   for(i=0;i<this.sFtv.length;i++) this.sFtv[i]=this.sFtv[i].split(',');
  }

  for(i=0;i<this.sFtv[r.m-1].length;i++){ //公历节日或纪念日,遍历本月节日表
   s=this.sFtv[r.m-1][i];
   if(s.substr(0,2)!=d0) continue;
   s = s.substr(2,s.length-2);
   type=s.substr(0,1);
   if(s.substr(5,1)=='-'){ //有年限的
     if( r.y<(s.substr(1,4)-0) || r.y>(s.substr(6,4)-0) ) continue;
     s = s.substr(10,s.length-10);
    } else {
     if(r.y<1850) continue;
     s = s.substr(1,s.length-1);
   }
   if(type=='#') r.A += s + ' ', r.Fjia = 1; //放假的节日
   if(type=='I') r.B += s + ' '; //主要
   if(type=='.') r.C += s + ' '; //其它
  }

  //按周查找
  var w=r.weeki; if(r.week>=r.week0) w+=1;
  var w2=w;      if(r.weeki==r.weekN-1) w2=5;
  w = m0 + w  + r.week;  //d日在本月的第几个星期某
  w2= m0 + w2 + r.week;

  for(i=0;i<this.wFtv.length;i++){
   s=this.wFtv[i];
   s2=s.substr(0,4);
   if(s2!=w && s2!=w2) continue;
   type=s.substr(4,1);
   s = s.substr(5,s.length-5);
   if(type=='#') r.A += s + ' ', r.Fjia = 1;
   if(type=='I') r.B += s +' ';
   if(type=='.') r.C += s + ' ';
  }

  //农历特殊日子
  if(r.cur_dz==0)  r.B += '冬至';
  if(r.cur_dz>=0&&r.cur_dz<81){ //数九
    w = this.Weeks[Math.floor(r.cur_dz/9)+1];
    if(r.cur_dz%9==0) r.B += '『'+ w +'九』 '
    else r.C += w + '九第'+(r.cur_dz%9+1)+'天 ';
  }

  w = r.Lday2.substr(0,1);
  w2= r.Lday2.substr(1,1);
  if(r.cur_xz>20 && 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 += '出梅 ';
}
};





function nianLiHTML(y){ //html年历生成
 var i,j,s='', s1,s2,v;
 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?'大':'小';
  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 = '<font color=red>'+s2+'</font>';
  //v=(v+0.5+J2000)%1; if(v>0.5) v=1-v; if(v<8/1440) s2 = '<u>'+s2+'</u>'; //对靠近0点的加注
  s1 += s2;

  for(j=0;j<24;j++){
    if(Lunar.ZQ[j]<Lunar.HS[i] || 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 = '<font color=red>'+s2+'</font>';
    //v=(v+0.5+J2000)%1; if(v>0.5) v=1-v; if(v<8/1440) s2 = '<u>'+s2+'</u>'; //对靠近0点的加注
    s1 += s2;
  }
  s += s1 + '<br>';
 }
 return y+'年<br>'+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] || 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 + '<br>';
 }
 return y+'年<br>'+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 斐济、肯加塔、马歇尔群岛;斐济');


⌨️ 快捷键说明

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