?? lunar.js
字號(hào):
/**************************
壽星萬(wàn)年歷中日對(duì)象的標(biāo)準(zhǔn)定義
假設(shè)日對(duì)象的數(shù)據(jù)結(jié)構(gòu)為ob
·日的公歷信息
ob.d0 2000.0起算儒略日,北京時(shí)12:00
ob.di 所在公歷月內(nèi)日序數(shù)
ob.y 所在公歷年,同lun.y
ob.m 所在公歷月,同lun.m
ob.d 日名稱(公歷)
ob.dn 所在公歷月的總天數(shù),同lun.d0
ob.week0所在月的月首的星期,同lun.w0
ob.week 星期
ob.weeki在本月中的周序號(hào)
ob.weekN本月的總周數(shù)
·日的農(nóng)歷信息
ob.Ldi 距農(nóng)歷月首的編移量,0對(duì)應(yīng)初一
ob.Ldc 日名稱(農(nóng)歷),即'初一,初二等'
ob.cur_dz 距冬至的天數(shù)
ob.cur_xz 距夏至的天數(shù)
ob.cur_lq 距立秋的天數(shù)
ob.cur_mz 距芒種的天數(shù)
ob.cur_xs 距小暑的天數(shù)
ob.Lmc 月名稱
ob.Ldn 月大小
ob.Lleap閏狀況(值為'閏'或空串)
ob.Lmc2 下個(gè)月名稱,判斷除夕時(shí)要用到
·日的農(nóng)歷紀(jì)年、月、日、時(shí)及星座
ob.Lyear 農(nóng)歷紀(jì)年(10進(jìn)制,1984年起算,分界點(diǎn)可以是立春也可以是春節(jié),在程序中選擇一個(gè))
ob.Lyear2 干支紀(jì)年
ob.Lmonth 紀(jì)月處理,1998年12月7日(大雪)開(kāi)始連續(xù)進(jìn)行節(jié)氣計(jì)數(shù),0為甲子
ob.Lmonth2 干支紀(jì)月
ob.Lday2 紀(jì)日
ob.Ltime2 紀(jì)時(shí)
ob.XiZ 星座
·日的回歷信息
ob.Hyear 年(回歷)
ob.Hmonth 月(回歷)
ob.Hday 日(回歷)
·日的其它信息
ob.yxmc 月相名稱
ob.yxjd 月相時(shí)刻(儒略日)
ob.yxsj 月相時(shí)間串
ob.jqmc 節(jié)氣名稱
ob.jqjd 節(jié)氣時(shí)刻(儒略日)
ob.jqsj 節(jié)氣時(shí)間串
*****************************/
/*****************************
壽星萬(wàn)年歷中月對(duì)象的數(shù)據(jù)結(jié)構(gòu)定義
假設(shè)月對(duì)象的名稱為lun
lun.w0 本月第一天的星期
lun.y 公歷年份
lun.m 公歷月分
lun.d0 月首的J2000.0起算的儒略日數(shù)
lun.dn 本月的天數(shù)
lun.Ly 該年的干支紀(jì)年
lun.ShX 該年的生肖
lun[0] 該月第1天(日對(duì)象)
lun[1] 該月第2天(日對(duì)象)
……
/******************************
/******************************
以下程序嚴(yán)格尊守以上規(guī)范,即創(chuàng)建的月(或日)對(duì)象,必含以上數(shù)據(jù)結(jié)構(gòu)內(nèi)容。壽星萬(wàn)年歷通過(guò)Lunar類件得到月對(duì)象
月或月對(duì)象的數(shù)據(jù)結(jié)構(gòu)的擴(kuò)充:例如調(diào)用oba.getDayName(ob,ob),可擴(kuò)展ob對(duì)象的“節(jié)日信息”,返回值在ob.A、ob.B、ob.C中
根據(jù)某些需要,用戶還可以自行擴(kuò)展ob
******************************/
//=============================
//公歷基礎(chǔ)構(gòu)件,JD物件的補(bǔ)充
//public中定義的成員可以直接使用
//=============================
var oba={ //公歷基礎(chǔ)構(gòu)件
//private私有成員定義
wFtv : new Array( //某月的第幾個(gè)星期幾,如第2個(gè)星期一指從月首開(kāi)始順序找到第2個(gè)“星期一”
'0150I世界麻風(fēng)日', //一月的最后一個(gè)星期日(月倒數(shù)第一個(gè)星期日)
'0520.國(guó)際母親節(jié)',
'0530I全國(guó)助殘日',
'0630.父親節(jié)',
'0730.被奴役國(guó)家周',
'0932I國(guó)際和平日',
'0940.國(guó)際聾人節(jié) 世界兒童日',
'0950I世界海事日',
'1011.國(guó)際住房日',
'1013I國(guó)際減輕自然災(zāi)害日(減災(zāi)日)',
'1144I感恩節(jié)'
),
sFtv : '', //假日表,由init初始化
//public公有成員定義
init:function(){ //初始化
var i;
//紀(jì)年數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)用逗號(hào)分開(kāi),每7個(gè)描述一個(gè)年號(hào),格式為:起始公元,使用年數(shù),已用年數(shù),朝代,朝號(hào),皇帝,年號(hào)
var s = //國(guó)歷節(jié)日,#表示放假日,I表示重要節(jié)日或紀(jì)念日
'01#元旦|' //1月
+'02I世界濕地日,10.國(guó)際氣象節(jié),14I情人節(jié)|' //2月
+'01.國(guó)際海豹日,03.全國(guó)愛(ài)耳日,05.1963-9999學(xué)雷鋒紀(jì)念日,08I婦女節(jié),12I植樹(shù)節(jié),12.1925-9999孫中山逝世紀(jì)念日,14.國(guó)際警察日,' //3月
+'15I1983-9999消費(fèi)者權(quán)益日,17.中國(guó)國(guó)醫(yī)節(jié),17.國(guó)際航海日,21.世界森林日,21.消除種族歧視國(guó)際日,21.世界兒歌日,22I世界水日,'
+'23I世界氣象日,24.1982-9999世界防治結(jié)核病日,25.全國(guó)中小學(xué)生安全教育日,30.巴勒斯坦國(guó)土日|'
+'01I1564-9999愚人節(jié),01.全國(guó)愛(ài)國(guó)衛(wèi)生運(yùn)動(dòng)月(四月),01.稅收宣傳月(四月),07I世界衛(wèi)生日,22I世界地球日,23.世界圖書(shū)和版權(quán)日,24.亞非新聞工作者日|' //4月
+'01#1889-9999勞動(dòng)節(jié),04I青年節(jié),05.碘缺乏病防治日,08.世界紅十字日,12I國(guó)際護(hù)士節(jié),15I國(guó)際家庭日,17.國(guó)際電信日,18.國(guó)際博物館日,' //5月
+'20.全國(guó)學(xué)生營(yíng)養(yǎng)日,23.國(guó)際牛奶日,31I世界無(wú)煙日|'
+'01I1925-9999國(guó)際兒童節(jié),05.世界環(huán)境保護(hù)日,06.全國(guó)愛(ài)眼日,17.防治荒漠化和干旱日,23.國(guó)際奧林匹克日,25.全國(guó)土地日,26I國(guó)際禁毒日|' //6月
+'01I1997-9999香港回歸紀(jì)念日,01I1921-9999中共誕辰,01.世界建筑日,02.國(guó)際體育記者日,07I1937-9999抗日戰(zhàn)爭(zhēng)紀(jì)念日,11I世界人口日,30.非洲婦女日|' //7月
+'01I1927-9999建軍節(jié),08.中國(guó)男子節(jié)(爸爸節(jié)),15I1945-9999抗日戰(zhàn)爭(zhēng)勝利紀(jì)念|' //8月
+'08.1966-9999國(guó)際掃盲日,08.國(guó)際新聞工作者日,09.毛澤東逝世紀(jì)念,10I中國(guó)教師節(jié),14.世界清潔地球日,' //9月
+'16.國(guó)際臭氧層保護(hù)日,18I九·一八事變紀(jì)念日,20.國(guó)際愛(ài)牙日,27.世界旅游日,28I孔子誕辰|'
+'01#1949-9999國(guó)慶節(jié),01.世界音樂(lè)日,01.國(guó)際老人節(jié),02#1949-9999國(guó)慶節(jié)假日,02.國(guó)際和平與民主自由斗爭(zhēng)日,03#1949-9999國(guó)慶節(jié)假日,' //10月
+'04.世界動(dòng)物日,06.老人節(jié),08.全國(guó)高血壓日,08.世界視覺(jué)日,09.世界郵政日,09.萬(wàn)國(guó)郵聯(lián)日,10I辛亥革命紀(jì)念日,10.世界精神衛(wèi)生日,'
+'13.世界保健日,13.國(guó)際教師節(jié),14.世界標(biāo)準(zhǔn)日,15.國(guó)際盲人節(jié)(白手杖節(jié)),16.世界糧食日,17.世界消除貧困日,22.世界傳統(tǒng)醫(yī)藥日,24.聯(lián)合國(guó)日,31.世界勤儉日|'
+'07.1917-9999十月社會(huì)主義革命紀(jì)念日,08.中國(guó)記者日,09.全國(guó)消防安全宣傳教育日,10.世界青年節(jié),11.國(guó)際科學(xué)與和平周(本日所屬的一周),12.孫中山誕辰紀(jì)念日,'
+'14.世界糖尿病日,17.國(guó)際大學(xué)生節(jié),17.世界學(xué)生節(jié),20.彝族年,21.彝族年,21.世界問(wèn)候日,21.世界電視日,22.彝族年,29.國(guó)際聲援巴勒斯坦人民國(guó)際日|' //11月
+'01I1988-9999世界艾滋病日,03.世界殘疾人日,05.國(guó)際經(jīng)濟(jì)和社會(huì)發(fā)展志愿人員日,08.國(guó)際兒童電視日,09.世界足球日,10.世界人權(quán)日,' //12月
+'12I西安事變紀(jì)念日,13I南京大屠殺(1937年)紀(jì)念日,20.澳門回歸紀(jì)念,21.國(guó)際籃球日,24I平安夜,25I圣誕節(jié),26.毛澤東誕辰紀(jì)念';
this.sFtv=s.split('|');
for(i=0;i<this.sFtv.length;i++) this.sFtv[i]=this.sFtv[i].split(',');
},
getDayName:function(u,r){ //取某日節(jié)日,傳入日對(duì)象
/****************
節(jié)日名稱生成
傳入日物件u
返回某日節(jié)日信息
r.A 重要喜慶日子名稱(可將日子名稱置紅)
r.B 重要日子名稱
r.C 各種日子名稱(連成一大串)
r.Fjia 放假日子(可用于日期數(shù)字置紅)
*****************/
var m0=(u.m<10?'0':'')+u.m;
var d0=(u.d<10?'0':'')+u.d;
var i,j,s,s2,type;
if(u.week==0||u.week==6) r.Fjia = 1; //星期日或星期六放假
//按公歷日期查找
for(i=0;i<this.sFtv[u.m-1].length;i++){ //公歷節(jié)日或紀(jì)念日,遍歷本月節(jié)日表
s=this.sFtv[u.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( u.y<(s.substr(1,4)-0) || u.y>(s.substr(6,4)-0) ) continue;
s = s.substr(10,s.length-10);
} else {
if(u.y<1850) continue;
s = s.substr(1,s.length-1);
}
if(type=='#') r.A += s + ' ', r.Fjia = 1; //放假的節(jié)日
if(type=='I') r.B += s + ' '; //主要
if(type=='.') r.C += s + ' '; //其它
}
//按周查找
var w=u.weeki; if(u.week>=u.week0) w+=1;
var w2=w; if(u.weeki==u.weekN-1) w2=5;
w = m0 + w + u.week; //d日在本月的第幾個(gè)星期某
w2= m0 + w2 + u.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 + ' ';
}
},
getHuiLi:function(d0,r){ //回歷計(jì)算
//以下算法使用Excel測(cè)試得到,測(cè)試時(shí)主要關(guān)心年臨界與月臨界
var z,y,m,d;
d = 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);
r.Hyear = z*30+y+1;
r.Hmonth= m+1;
r.Hday = d+1;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -