?? ri.js
字號(hào):
/*****************************************************************************
日期資料
*****************************************************************************/
var lunarInfo=new Array(
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0)
var solarMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var Gan=new Array("甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
var Zhi=new Array("子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥");
var Animals=new Array("鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬");
var solarTerm = new Array("小寒","大寒","立春","雨水","驚蟄","春分","清明","谷雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至")
var sTermInfo = new Array(0,21208,42467,63836,85337,107014,128867,150921,173149,195551,218072,240693,263343,285989,308563,331033,353350,375494,397447,419210,440795,462224,483532,504758)
var nStr1 = new Array('日','一','二','三','四','五','六','七','八','九','十')
var nStr2 = new Array('初','十','廿','卅',' ')
var monthName = new Array("JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC");
go="a"
//國(guó)歷節(jié)日 *表示放假日
var sFtv = new Array(
"0101*元旦",
"0214 情人節(jié)",
"0308 婦女節(jié)",
"0312 植樹節(jié)",
"0315 消費(fèi)者權(quán)益日",
"0401 愚人節(jié)",
"0501 勞動(dòng)節(jié)",
"0504 青年節(jié)",
"0512 護(hù)士節(jié)",
"0601 兒童節(jié)",
"0701 建黨節(jié) 香港回歸紀(jì)念",
"0801 建軍節(jié)",
"0808 父親節(jié)",
"0909 毛澤東逝世紀(jì)念",
"0910 教師節(jié)",
"0928 孔子誕辰",
"1001*國(guó)慶節(jié)",
"1006 老人節(jié)",
"1024 聯(lián)合國(guó)日",
"1112 孫中山誕辰紀(jì)念",
"1220 澳門回歸紀(jì)念",
"1225 Christmas Day",
"1226 毛澤東誕辰紀(jì)念")
//農(nóng)歷節(jié)日 *表示放假日
var lFtv = new Array(
"0101*春節(jié)",
"0115 元宵節(jié)",
"0328 媛的生日",
"0505 端午節(jié)",
"0707 七夕情人節(jié)",
"0715 中元節(jié)",
"0815 中秋節(jié)",
"0903 俊的生日",
"0909 重陽(yáng)節(jié)",
"1208 臘八節(jié)",
"1224 小年",
"0100*除夕")
//某月的第幾個(gè)星期幾
var wFtv = new Array(
"0131 Martin Luther King Day",
"0231 President's Day",
"0520 母親節(jié)",
"0530 Armed Forces Day",
"0531 Victoria Day",
"0716 合作節(jié)",
"0730 被奴役國(guó)家周",
"0811 Civic Holiday",
"0911 Labor Holiday",
"1021 Columbus Day",
"1144 Thanksgiving")
/*****************************************************************************
日期計(jì)算
*****************************************************************************/
//====================================== 傳回農(nóng)歷 y年的總天數(shù)
function lYearDays(y) {
var I, sum = 348
for(I=0x8000; I>0x8; I>>=1) sum += (lunarInfo[y-1900] & I)? 1: 0
return(sum+leapDays(y))
}
//====================================== 傳回農(nóng)歷 y年閏月的天數(shù)
function leapDays(y) {
if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29)
else return(0)
}
//====================================== 傳回農(nóng)歷 y年閏哪個(gè)月 1-12 , 沒閏傳回 0
function leapMonth(y) {
return(lunarInfo[y-1900] & 0xf)
}
//====================================== 傳回農(nóng)歷 y年m月的總天數(shù)
function monthDays(y,m) {
return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 )
}
//====================================== 算出農(nóng)歷, 傳入日期物件, 傳回農(nóng)歷日期物件
// 該物件屬性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl
function Lunar(objDate) {
var I, leap=0, temp=0
var baseDate = new Date(1900,0,31)
var offset = (objDate - baseDate)/86400000
this.dayCyl = offset + 40
this.monCyl = 14
for(I=1900; I<2050 && offset>0; I++) {
temp = lYearDays(I)
offset -= temp
this.monCyl += 12
}
if(offset<0) {
offset += temp;
I--;
this.monCyl -= 12
}
this.year = I
this.yearCyl = I-1864
leap = leapMonth(I) //閏哪個(gè)月
this.isLeap = false
for(I=1; I<13 && offset>0; I++) {
//閏月
if(leap>0 && I==(leap+1) && this.isLeap==false)
{ --I; this.isLeap = true; temp = leapDays(this.year); }
else
{ temp = monthDays(this.year, I); }
//解除閏月
if(this.isLeap==true && I==(leap+1)) this.isLeap = false
offset -= temp
if(this.isLeap == false) this.monCyl ++
}
if(offset==0 && leap>0 && I==leap+1)
if(this.isLeap)
{ this.isLeap = false; }
else
{ this.isLeap = true; --I; --this.monCyl;}
if(offset<0){ offset += temp; --I; --this.monCyl; }
this.month = I
this.day = offset + 1
}
//==============================傳回國(guó)歷 y年某m+1月的天數(shù)
function solarDays(y,m) {
if(m==1)
return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28)
else
return(solarMonth[m])
}
//============================== 傳入 offset 傳回干支, 0=甲子
function cyclical(num) {
return(Gan[num%10]+Zhi[num%12])
}
//============================== 月歷屬性
function calElement(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) {
this.isToday = false;
//國(guó)歷
this.sYear = sYear;
this.sMonth = sMonth;
this.sDay = sDay;
this.week = week;
//農(nóng)歷
this.lYear = lYear;
this.lMonth = lMonth;
this.lDay = lDay;
this.isLeap = isLeap;
//干支
this.cYear = cYear;
this.cMonth = cMonth;
this.cDay = cDay;
this.color = '';
this.lunarFestival = ''; //農(nóng)歷節(jié)日
this.solarFestival = ''; //國(guó)歷節(jié)日
this.solarTerms = ''; //節(jié)氣
}
//===== 某年的第n個(gè)節(jié)氣為幾日(從0小寒起算)
function sTerm(y,n) {
var offDate = new Date( ( 31556925974.7*(y-1900) + sTermInfo[n]*60000 ) + Date.UTC(1900,0,6,2,5) )
return(offDate.getUTCDate())
}
//============================== 傳回月歷物件 (y年,m+1月)
function calendar(y,m) {
var sDObj, lDObj, lY, lM, lD=1, lL, lX=0, tmp1, tmp2
var lDPOS = new Array(3)
var n = 0
var firstLM = 0
sDObj = new Date(y,m,1) //當(dāng)月一日日期
this.length = solarDays(y,m) //國(guó)歷當(dāng)月天數(shù)
this.firstWeek = sDObj.getDay() //國(guó)歷當(dāng)月1日星期幾
for(var I=0;I<this.length;I++) {
if(lD>lX) {
sDObj = new Date(y,m,I+1) //當(dāng)月一日日期
lDObj = new Lunar(sDObj) //農(nóng)歷
lY = lDObj.year //農(nóng)歷年
lM = lDObj.month //農(nóng)歷月
lD = lDObj.day //農(nóng)歷日
lL = lDObj.isLeap //農(nóng)歷是否閏月
lX = lL? leapDays(lY): monthDays(lY,lM) //農(nóng)歷當(dāng)月最後一天
if(n==0) firstLM = lM
lDPOS[n++] = I-lD+1
}
//sYear,sMonth,sDay,week,
//lYear,lMonth,lDay,isLeap,
//cYear,cMonth,cDay
this[I] = new calElement(y, m+1, I+1, nStr1[(I+this.firstWeek)%7],
lY, lM, lD++, lL,
cyclical(lDObj.yearCyl) ,cyclical(lDObj.monCyl), cyclical(lDObj.dayCyl++) )
if((I+this.firstWeek)%7==0) this[I].color = 'red' //周日顏色
if((I+this.firstWeek)%14==13) this[I].color = 'red' //周休二日顏色
}
//節(jié)氣
tmp1=sTerm(y,m*2 )-1
tmp2=sTerm(y,m*2+1)-1
this[tmp1].solarTerms = solarTerm[m*2]
this[tmp2].solarTerms = solarTerm[m*2+1]
if(m==3) this[tmp1].color = 'red' //清明顏色
//國(guó)歷節(jié)日
for(I in sFtv)
if(sFtv[I].match(/^(\d{2})(\d{2})([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
this[Number(RegExp.$2)-1].solarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[Number(RegExp.$2)-1].color = 'red'
}
//月周節(jié)日
for(I in wFtv)
if(wFtv[I].match(/^(\d{2})(\d)(\d)([\s\*])(.+)$/))
if(Number(RegExp.$1)==(m+1)) {
tmp1=Number(RegExp.$2)
tmp2=Number(RegExp.$3)
this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' '
}
//農(nóng)歷節(jié)日
for(I in lFtv)
if(lFtv[I].match(/^(\d{2})(.{2})([\s\*])(.+)$/)) {
tmp1=Number(RegExp.$1)-firstLM
if(tmp1==-11) tmp1=1
if(tmp1 >=0 && tmp1<n) {
tmp2 = lDPOS[tmp1] + Number(RegExp.$2) -1
if( tmp2 >= 0 && tmp2<this.length) {
this[tmp2].lunarFestival += RegExp.$4 + ' '
if(RegExp.$3=='*') this[tmp2].color = 'red'
}
}
}
//黑色星期五
if((this.firstWeek+12)%7==5)
this[12].solarFestival += '黑色星期五 '
//今日
if(y==tY && m==tM) this[tD-1].isToday = true;
}
//====================== 中文日期
function cDay(d){
var s;
switch (d) {
case 10:
s = '初十'; break;
case 20:
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -