function VsbPerpetualcld() { var _this = this; 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("1 月","2 月","3 月","4 月","5 月","6 月","7 月","8 月","9 月","10 月","11 月","12 月"); //国历节日 *表示放假日 var sFtv = new Array( "0101*元旦", "0214 情人节", "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0401 愚人节", "0501 劳动节", "0504 青年节", "0512 护士节", "0601 儿童节", "0701 建党节 香港回归纪念", "0801 建军节", "0909 毛泽东逝世纪念", "0910 教师节", "0928 孔子诞辰", "1001*国庆节", "1006 老人节", "1024 联合国日", "1112 孙中山诞辰纪念", "1220 澳门回归纪念", "1225 圣诞节", "1226 毛泽东诞辰纪念") var lFtv = new Array( "0101*春节", "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0815 中秋节", "0909 重阳节", "1224 小年", "0100*除夕") //某月的第几个星期几 var wFtv = new Array( "0520 母亲节","0630 父亲节" ) lYearDays = function (y) { var i, sum = 348 for(i=0x8000; i>0x8; i>>=1) sum += (lunarInfo[y-1900] & i)? 1: 0 return(sum+leapDays(y)) } leapDays = function(y) { if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29) else return(0) } leapMonth = function(y) { return(lunarInfo[y-1900] & 0xf) } monthDays = function(y,m) { return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 ) } Lunar = function(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) //闰哪个月 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 } solarDays = function(y,m) { if(m==1) return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28) else return(solarMonth[m]) } cyclical = function(num) { return(Gan[num%10]+Zhi[num%12]) } calElement = function(sYear,sMonth,sDay,week,lYear,lMonth,lDay,isLeap,cYear,cMonth,cDay) { this.isToday = false; //国历 this.sYear = sYear; this.sMonth = sMonth; this.sDay = sDay; this.week = week; //农历 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 = ''; //农历节日 this.solarFestival = ''; //国历节日 this.solarTerms = ''; //节气 } //===== 某年的第n个节气为几日(从0小寒起算) sTerm = function(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月) calendar = function(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) //当月一日日期 this.length = solarDays(y,m) //国历当月天数 this.firstWeek = sDObj.getDay() //国历当月1日星期几 for(var i=0;ilX) { sDObj = new Date(y,m,i+1) //当月一日日期 lDObj = new Lunar(sDObj) //农历 lY = lDObj.year //农历年 lM = lDObj.month //农历月 lD = lDObj.day //农历日 lL = lDObj.isLeap //农历是否闰月 lX = lL? leapDays(lY): monthDays(lY,lM) //农历当月最後一天 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' //周休二日颜色 } //节气 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' //清明颜色 //国历节日 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' } } //月周节日 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) if(tmp1<5) this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].solarFestival += RegExp.$5 + ' '; else { tmp1 -= 5; tmp3 = (this.firstWeek+this.length-1)%7; //当月最后一天星期? this[this.length - tmp3 - 7*tmp1 + tmp2 - (tmp2>tmp3?7:0) - 1 ].solarFestival += RegExp.$5 + ' '; } } //农历节日 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= 0 && tmp21874 && SY<1909) yDisplay = '光绪' + (((SY-1874)==1)?'元':SY-1874) if(SY>1908 && SY<1912) yDisplay = '宣统' + (((SY-1908)==1)?'元':SY-1908) if(SY>1911 && SY<1950) yDisplay = '民国' + (((SY-1911)==1)?'元':SY-1911) if(SY>1949) yDisplay = '中华人民共和国' + (((SY-1949)==1)?'元':SY-1949) document.getElementById("GZ").innerHTML = "" + yDisplay +'年 农历' + cyclical(SY-1900+36) + '年【'+Animals[(SY-4)%12]+'】' + ""; for(i=0;i<42;i++) { sObj=eval("document.getElementById('SD"+ i+"')"); lObj=eval("document.getElementById('LD"+ i+"')"); sD = i - cld.firstWeek; if(sD>-1 && sD'; else //显示农历日 lObj.innerHTML = cDay(cld[sD].lDay); s=cld[sD].lunarFestival; if(s.length>0) { //农历节日 if(s.length>6) s = s.substr(0, 4)+'…'; s = s.fontcolor('red'); } else { //国历节日 s=cld[sD].solarFestival; if(s.length>0) { size = (s.charCodeAt(0)>0 && s.charCodeAt(0)<128)?8:4; if(s.length>size+2) s = s.substr(0, size)+'…'; s = s.fontcolor('blue'); } else { //廿四节气 s=cld[sD].solarTerms; if(s.length>0) s = s.fontcolor('limegreen'); } } if(s.length>0) lObj.innerHTML = s; } else { //非日期 sObj.innerHTML = ''; lObj.innerHTML = ''; } } } changeCld = function(calendartitlestyle,todyacolor) { var y,m; y=document.getElementById("SY").selectedIndex+1900; m=document.getElementById("SM").selectedIndex; drawCld(y,m,calendartitlestyle,todyacolor); } pushBtm = function(K,calendartitlestyle,todyacolor) { switch (K){ case 'YU' : if(document.getElementById("SY").selectedIndex>0) document.getElementById("SY").selectedIndex--; break; case 'YD' : if(document.getElementById("SY").selectedIndex<149) document.getElementById("SY").selectedIndex++; break; case 'MU' : if(document.getElementById("SM").selectedIndex>0) { document.getElementById("SM").selectedIndex--; } else { document.getElementById("SM").selectedIndex=11; if(document.getElementById("SY").selectedIndex>0) document.getElementById("SY").selectedIndex--; } break; case 'MD' : if(document.getElementById("SM").selectedIndex<11) { document.getElementById("SM").selectedIndex++; } else { document.getElementById("SM").selectedIndex=0; if(document.getElementById("SY").selectedIndex<149) document.getElementById("SY").selectedIndex++; } break; default : document.getElementById("SY").selectedIndex=tY-1900; document.getElementById("SM").selectedIndex=tM; } changeCld(calendartitlestyle,todyacolor); } var Today = new Date(); var tY = Today.getFullYear(); var tM = Today.getMonth(); var tD = Today.getDate(); ////////////////////////////////////////////////////////////////////////////// var width = "130"; var offsetx = 2; var offsety = 16; var x = 0; var y = 0; var snow = 0; var sw = 0; var cnt = 0; var dStyle; //显示详细日期资料 mOvr = function(v,calendartitlestyle) { var s,festival; var sObj=eval("document.getElementById('SD"+ v+"')"); var d=sObj.innerHTML-1; if(sObj.innerHTML!='') { sObj.style.cursor = 's-resize'; if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '') festival = ''; else festival = ''+ '
'+ ''+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'
'; s= '
' + '
'+ cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日
星期'+cld[d].week+'
'+ '农历'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日
'+ ''+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日'+ '
'+ festival +'
'; document.getElementById("detail").innerHTML = s; if (snow == 0) { dStyle.left = x+offsetx-(width/2); dStyle.top = y+offsety; dStyle.visibility = "visible"; snow = 1; } } } //清除详细日期资料 mOut = function() { if ( cnt >= 1 ) { sw = 0 } if ( sw == 0 ) { snow = 0; document.getElementById("detail").style.visibility = "hidden";} else cnt++; } //取得位置 mouseMove = function(ev) { ev= ev || window.event; mouseCoords(ev); } mouseCoords = function(ev) { if(ev.pageX || ev.pageY){ x=ev.pageX; y=ev.pageY; } x=ev.clientX + document.body.scrollLeft - document.body.clientLeft; y=ev.clientY + document.body.scrollTop - document.body.clientTop; } changeTZ = function() { } setCookie = function(name, value) { var today = new Date() var expires = new Date() expires.setTime(today.getTime() + 1000*60*60*24*365) document.cookie = name + "=" + escape(value) + "; expires=" + expires.toGMTString() } getCookie = function(Name) { var search = Name + "=" if(document.cookie.length > 0) { offset = document.cookie.indexOf(search) if(offset != -1) { offset += search.length end = document.cookie.indexOf(";", offset) if(end == -1) end = document.cookie.length return unescape(document.cookie.substring(offset, end)) } else return "" } } _this._getperpetualCalendarHtml = function(calendarcontentstyle,calendarinfostyle,calendarcncontentstyle) { var gNum for(i=0;i<6;i++) { document.write('') for(j=0;j<7;j++) { gNum = i*7+j var colorstr = ""; if(j == 0 || j == 6) colorstr = ' style="color:red"'; document.write('
') } document.write('') } } _this._getperpetualCalendar = function(calendartitlestyle,todyacolor) { dStyle = document.getElementById("detail").style; document.getElementById("SY").selectedIndex=tY-1900; document.getElementById("SM").selectedIndex=tM; drawCld(tY,tM,calendartitlestyle,todyacolor); } }