第一步,在主題目錄配置下打開 themes\landscape\layout\_widgetjavascript
代碼太長,全部在本文最後附上。css
注:爲了不代碼在Hexo渲染時中文字符亂碼,此 .ejs 內容均爲已經轉碼後的代碼,特此說明!java
第二步,在主題目錄配置下 themes\landscape\ 打開 _config.yml 文件,git
第三步,在Hexo根目錄配置下鼠標右鍵 git bash 運行 "hexo g -d" 便可在我的網站查看效果。bash
<div class="widget-wrap"> <h3 class="widget-title">日历小工具</h3> <ul class="widget calendar"> <!-- 如下是含農曆日曆代碼--> <body> <SCRIPT type="text/javascript" > 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"); var sFtv = new Array( "0101*元旦", "0214 情人节", "0303 我生日", "0308 妇女节", "0312 植树节", "0315 消费者权益日", "0317 St. Patrick's", "0401 愚人节", "0501 劳动节", "0504 青年节", "0512 护士节", "0512 茵生日", "0601 儿童节", "0614 Flag Day", "0701 建党节 香港回归纪念", "0703 炎黄在线诞辰", "0718 托普诞辰", "0801 建军节", "0808 父亲节", "0909 毛泽东逝世纪念","0910 教师节", "0928 孔子诞辰", "1001*国庆节", "1006 老人节","1024 联合国日","1111 Veteran's / Remembrance Day","1112 孙中山诞辰纪念", "1220 澳门回归纪念", "1225 Christmas Day","1226 毛泽东诞辰纪念") var lFtv = new Array( "0101*春节", "0115 元宵节", "0505 端午节", "0707 七夕情人节", "0715 中元节","0815 中秋节", "0909 重阳节", "1208 腊八节", "1224 小年", "0100*除夕") var wFtv = new Array( "0131 Martin Luther King Day", "0231 President's Day", "0520 母亲节", "0530 Armed Forces Day", "0531 Victoria Day", "0716 合作节", "0730 被奴役国家周", "0811 Civic Holiday", "0911 Labor Holiday", "1021 Columbus Day", "1144 Thanksgiving") 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)) } function leapDays(y) { if(leapMonth(y)) return((lunarInfo[y-1900] & 0x10000)? 30: 29) else return(0) } function leapMonth(y) { return(lunarInfo[y-1900] & 0xf) } function monthDays(y,m) { return( (lunarInfo[y-1900] & (0x10000>>m))? 30: 29 ) } 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) 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 } function solarDays(y,m) { if(m==1) return(((y%4 == 0) && (y%100 != 0) || (y%400 == 0))? 29: 28) else return(solarMonth[m]) } 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; 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 = ''; } 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()) } 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) this.length = solarDays(y,m) this.firstWeek = sDObj.getDay() for(var I=0;I<this.length;I++) { if(lD>lX) { 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 } 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) this[((this.firstWeek>tmp2)?7:0) + 7*(tmp1-1) + tmp2 - this.firstWeek].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<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: s = '二十'; break; break; case 30: s = '三十'; break; break; default : s = nStr2[Math.floor(d/10)]; s += nStr1[d%10]; } return(s); } var cld; function drawCld(SY,SM) { var I,sD,s,size; cld = new calendar(SY,SM); if(SY>1874 && 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 = '' GZ.innerHTML = yDisplay +' 农历' + cyclical(SY-1900+36) + '年 ['+Animals[(SY-4)%12]+'年]'; YMBG.innerHTML = " " + SY + "<BR> " + monthName[SM]; for(I=0;I<42;I++) { sObj=eval('SD'+ I); lObj=eval('LD'+ I); sObj.className = ''; sD = I - cld.firstWeek; if(sD>-1 && sD<cld.length) { sObj.innerHTML = sD+1; if(cld[sD].isToday) sObj.className = 'todyaColor'; sObj.style.color = cld[sD].color; if(cld[sD].lDay==1) lObj.innerHTML = '<b>'+(cld[sD].isLeap?'闰':'') + cld[sD].lMonth + '月' + (monthDays(cld[sD].lYear,cld[sD].lMonth)==29?'小':'大')+'</b>'; 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 = ''; } } } function changeLong() { var y,m,ly,lm,id,im,iy,yangy,yangm,deltm,miny,tt; CLD.SY.selectedIndex=CLD.D1.selectedIndex; CLD.SM.selectedIndex=CLD.D2.selectedIndex; yangm=0;yangy=0; tt=true; while (tt) { yangm=0;yangy=0; changeCld(); for(I=0;I<42;I++) { sD = I - cld.firstWeek; if(sD>-1 && sD<cld.length) { if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900)) { yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ; tt=false; break; } } } if (!tt) break; pushBtm('MD'); changeCld(); for(I=0;I<42;I++) { sD = I - cld.firstWeek; if(sD>-1 && sD<cld.length) { if ((cld[sD].lMonth==CLD.D2.selectedIndex+1)&&(cld[sD].lYear==CLD.D1.selectedIndex+1900)) { yangy=CLD.SY.selectedIndex+1900; yangm=CLD.SM.selectedIndex ; tt=false; break; } } } break; } CLD.SM.selectedIndex=yangm; pushBtm('MD'); pushBtm('MU'); } function changeCld() { var y,m; y=CLD.SY.selectedIndex+1900; m=CLD.SM.selectedIndex; drawCld(y,m); } function pushBtm(K) { switch (K){ case 'YU' : if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; break; case 'YD' : if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++; break; case 'MU' : if(CLD.SM.selectedIndex>0) { CLD.SM.selectedIndex--; } else { CLD.SM.selectedIndex=11; if(CLD.SY.selectedIndex>0) CLD.SY.selectedIndex--; } break; case 'MD' : if(CLD.SM.selectedIndex<11) { CLD.SM.selectedIndex++; } else { CLD.SM.selectedIndex=0; if(CLD.SY.selectedIndex<149) CLD.SY.selectedIndex++; } break; default : CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; } changeCld(); } 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; document.onmousemove = mEvn; function mOvr(v) { var s,festival; var sObj=eval('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 = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><TR><TD>'+ '<FONT COLOR="#000000" >'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+'</FONT></TD>'+ '</TR></TABLE>'; s= '<TABLE WIDTH="130" BORDER=0 CELLPADDING="2" CELLSPACING=0 BGCOLOR="#000066"><TR><TD>' + '<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0><TR><TD ALIGN="right"><FONT COLOR="#ffffff">'+ cld[d].sYear+' 年 '+cld[d].sMonth+' 月 '+cld[d].sDay+' 日<br>星期'+cld[d].week+'<br>'+ '<font color="violet">农历'+(cld[d].isLeap?'闰 ':' ')+cld[d].lMonth+' 月 '+cld[d].lDay+' 日</font><br>'+ '<font color="yellow">'+cld[d].cYear+'年 '+cld[d].cMonth+'月 '+cld[d].cDay + '日</font>'+ '</FONT></TD></TR></TABLE>'+ festival +'</TD></TR></TABLE>'; document.all["detail"].innerHTML = s; if (snow == 0) { dStyle.left = x+offsetx-(width/2); dStyle.top = y+offsety; dStyle.visibility = "visible"; snow = 1; } } } function mOut() { if ( cnt >= 1 ) { sw = 0 } if ( sw == 0 ) { snow = 0; dStyle.visibility = "hidden";} else cnt++; } function mEvn() { x=event.x; y=event.y; if (document.body.scrollLeft) {x=event.x+document.body.scrollLeft; y=event.y+document.body.scrollTop;} if (snow){ dStyle.left = x+offsetx-(width/2) dStyle.top = y+offsety } } function tick() { var today today = new Date() Clock.innerHTML = today.toLocaleString().replace(/(年|月)/g, "/").replace(/日/, ""); window.setTimeout("tick()", 1000); } function setCookie(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() } function getCookie(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 "" } } function initial() { dStyle = detail.style; CLD.SY.selectedIndex=tY-1900; CLD.SM.selectedIndex=tM; drawCld(tY,tM); tick(); } </SCRIPT> <STYLE>.todyaColor { BACKGROUND-COLOR: aqua } </STYLE> <BODY onload=initial()> <DIV id=detail style="POSITION: absolute"></DIV> <FORM name=CLD> <div align="center"> <TABLE width=100% align="center" height="40" bordercolordark="#CC9900" border=1> <center> <TBODY> <TD align=middle vAlign=top width=100% height=50%> <!-- 本機計算機時間UTF8轉碼後爲下一行的:本地计算机时间--> <center><font color=RED><span>本地计算机时间:</span> </FONT></FONT><BR><FONT color=#000080 id=Clock size=3 align="center"></FONT> <!--時區 *表示自動調整爲日光節約時間--> </TABLE> </div> <center><tr>---------------------------------------------------------</tr></center> <div align="center"> <table width=100% align="center" height="40" border=1> <CENTER> <center> <TBODY> </center></center> <td height="40" width=80% align="center"><font size="2"> <!-- 公曆,年,月UTF8轉碼後爲 公历 年 月--> <font color="#0000FF">公历 </font>年</font><FONT color=#ffffff ><SELECT name=SY onchange=changeCld()> <SCRIPT type="text/javascript" > for(I=1900;I<2050;I++) document.write('<option>'+I) </SCRIPT> </SELECT> </FONT>月<FONT color=#ffffff ><SELECT name=SM onchange=changeCld() > <SCRIPT type="text/javascript" > for(I=1;I<13;I++) document.write('<option>'+I) </SCRIPT> </SELECT></FONT></font> <!-- 陰曆,年,月UTF8轉碼後爲 阴历 年 月--> <br><font size="2"><FONT ><font color="#0000FF">阴历 </font>年</font><FONT color=#ffffff ><SELECT name=D1 onchange=changeLong() > <SCRIPT type="text/javascript" > for(I=1900;I<2050;I++) document.write('<option>'+I) </SCRIPT> </SELECT> </FONT>月<FONT color=#ffffff ><SELECT name=D2 onchange=changeLong() > <SCRIPT type="text/javascript" > for(I=1;I<13;I++) document.write('<option>'+I) </SCRIPT> </SELECT></FONT></font></br></div> <!-- 月,當月 UTF8轉碼後爲 月 当月--> <!-- ↑ ↓ UTF8轉碼後爲 ↑ ↓--> <td height="40" width=20% align="center"> <BUTTON onclick="pushBtm('MU')" >月↑ </BUTTON><br> <BUTTON onclick="pushBtm('')" >当月</BUTTON><br> <BUTTON onclick="pushBtm('MD')" >月↓ </BUTTON> </td> <CENTER> <!--'陰曆存在跨月狀況,若是查找到的陰曆月跨兩個公曆月,用' UTF8轉碼後爲 阴历存在跨月情况,如果查找到的阴历月跨两个公历月,用--> <!-- '翻動能夠找到你想要的確切日期。'UTF8轉碼後爲 翻动可以找到你想要的确切日期。--> <table align=middle border=1 width=100% bordercolordark="#FFFFCC"> <td width="100%" align=middle ><font color=#0> 阴历存在跨月情况,如果查找到的阴历月跨两个公历月,用<font color=blue>[月↑][月↓]</font>翻动可以找到你想要的确切日期。</font></td> <center><tr>---------------------------------------------------------</tr></center> </table> </CENTER> </table> <center><tr>---------------------------------------------------------</tr></center> <FONT id=YMBG COLOR=#f0f0f0> </FONT> <div align="center"> <center> <TABLE align="center" border=1 width=100% cellspacing="1"> <center> <TBODY> <center> <TR> <center><TD bgColor=#000080 colSpan=7 align="center" width=100% height="25"><FONT color=#000080 size=2> </FONT> <center> <FONT color=#ffffff id=GZ size=4></FONT><BR></TD></TR> <center> <TR align=middle bgColor=#e0e0e0> <center> <!-- 日一二三四五六 UTF8轉碼後爲 日 一 二 三 四 五 六 --> <center> <TD width=15% align="center" bgcolor="#99CCFF"><font size="2">日</font></TD> <center> <TD width=14% align="center" bgcolor="#99CCFF"><font size="2">一</font></TD> <center> <TD width=14% align="center" bgcolor="#99CCFF"><font size="2">二</font></TD> <center> <TD width=14% align="center" bgcolor="#99CCFF"><font size="2">三</font></TD> <center> <TD width=14% align="center" bgcolor="#99CCFF"><font size="2">四</font></TD> <center> <TD width=14% align="center" bgcolor="#99CCFF"><font size="2">五</font></TD> <center> <TD width=15% align="center" bgcolor="#99CCFF"><font size="2">六 </font></TD></TR> <center> <SCRIPT type="text/javascript" > var gNum for(I=0;I<6;I++) { document.write('<tr align=center>') for(j=0;j<7;j++) { gNum = I*7+j document.write('<td id="GD' + gNum +'" onMouseOver="mOvr(' + gNum +')" onMouseOut="mOut()"><font id="SD' + gNum +'" size=2 ') if(j == 0) document.write(' color=red') if(j == 6) if(I%2==1) document.write(' color=red') else document.write(' color=green') document.write(' TITLE=""> </font><br><font id="LD' + gNum + '" size=2 > </font></td>') } document.write('</tr>') } </SCRIPT> </TBODY></TABLE> </center> </div> </TD> </TR></TBODY></TABLE> </div> </FORM> </body> </td> <!-- 日曆代碼結束--> </ul> </div>