我写的万年历插件(含天干地支,农历,阳历,节气,各种节假日等),基于MooTools 1.4
演示效果图:
插件源代码:
function PL_rili(_id,Option,memo,_edit){//_edit:日曆內的價格可否被編輯 //如果页面中不包含该对象则退出该扩展方法 if(!_id){return false;} if(_edit==undefined){_edit=false} var Today=new Date(); var tY=Today.getFullYear(); var tM=Today.getMonth(); var tD=Today.getDate(); //農曆資料 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 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 cn_mth=new Array("","一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"); var cn_day=new Array("","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十","十一","十二","十三","十四","十五","十六","十七","十八","十九","二十","廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十","卅一"); var wFtv=new Array("0520 母親節","1144 感恩節");//某月的第幾個星期幾 //國曆節日 *表示放假日 var sFtv=new Array( "0101*元旦","0111 司法節","0115 藥師節","0214 情人節","0215 戲劇節","0228*和平紀念日","0301 兵役節","0308 婦女節","0312 植樹節","0317 國醫節","0320 郵政節", "0321 氣象節","0325 美術節","0326 廣播節","0329 青年節","0330 出版節","0401 愚人節","0404*兒童節","0405*清明節","0408 衛生節","0501 勞動節","0504 文藝節", "0505 舞蹈節","0512 護士節","0603 禁煙節","0606 水利節","0609 鐵路節","0615 警察節","0701 漁民節","0711 航海節","0808 父親節","0814 空軍節","0901 記者節", "0903 軍人節","0909 律師節","0913 法律日","0928 教師節","1006 老人節","1010*國慶日","1021 華僑節","1024 聯合國日","1025 光復節","1031 榮民節","1101 商人節", "1111 工業節","1112 國父誕辰","1121 防空節","1205 海員節","1210 人權節","1212 憲兵節","1225*行憲紀念日","1227 建築師節","1228 電信節","1231 受信節" ); //農曆節日 *表示放假日 var lFtv=new Array( "0100*除夕","0101*春節","0102*回娘家","0103*祭祖","0104 迎神","0105 開市","0109 天公生","0115 元宵節","0202 土地公生","0219 觀世音誕辰","0323 媽祖生日", "0408 浴彿節","0505*端午節","0701 開鬼門","0707 七夕","0715 中元節","0800 關鬼門","0815*中秋節","0909 重陽節","1208 臘八節","1216 尾牙","1224 送神" ); //畫月曆 Show(tY,tM,tD); function Show(_y,_m,_d){ var i,sD; var cld=new core(_y,_m); Ganzhi((_y-1900)*12 + _m +14); css='<style type="text/css">'; css+='#PL_rili_tit{width:100%;font-family:Verdana,arial;font-size:15px;font-weight:bold;color:#444;position:relative;letter-spacing:2px;}'; css+='#PL_rili_tit div{margin-bottom:4px;color:#486297;}'; css+='#PL_rili_tit .btn{width:auto;background:none repeat scroll 0 0 #637BAD;border-color:#637BAD #28447E #637BAD #FFF;border-style:solid;border-width:0 0 0 1px;color:#FFF;font-size:13px;font-weight:bold;height:23px;padding:3px 10px;cursor:pointer;}'; css+='#PL_rili_box{width:100%;font-family:Verdana,arial,Pmingliu;font-size:12px;color:#444;position:relative;border:1px solid #486297;}'; css+='#PL_rili_box td{text-align:center;}#PL_rili_box input{border-width:1px;width:98%;}'; css+='#PL_rili_box #r1 td{border-right:1px solid #D6D6D6;background-color:#637BAD;color:#EEE;font-weight:bold;padding:4px 0;text-align:center;vertical-align:top;}'; css+='#PL_rili_box #r2{border-width:0 1px 1px 1px;border-color:#EEE #AAA #EEE #AAA;border-style:solid;height:55px;vertical-align:top;color:#444;}'; css+='#PL_rili_box #r2 td{border-right:1px solid #FFF;border-bottom:1px solid #FFF;}'; css+='#PL_rili_box #r2 div{background-color:#EEE;overflow:hidden;position:relative;width:100%;padding:2px 0;}'; css+='#PL_rili_box #r2 .a{float:right;padding-right:3px;font-size:12px;font-weight:normal;}'; css+='#PL_rili_box #r2 .b{float:left;}#PL_rili_box #r2 .b b{font-size:13px;}#PL_rili_box #r2 .b em{color:#888;font-style:normal;font-size:12px;}'; css+='#PL_rili_box #r2 .c{color:#333;float:left;text-align:left;text-indent:4px;width:100%;font-size:12px;font-weight:normal;}'; css+='</style>'; css+='<div id="PL_rili_tit">'; css+='<div style="float:right;"><button class="btn" id="del">◄</button><button class="btn" id="today">本月</button><button class="btn" id="add">►</button></div>'; css+='<div>'+_y+'年'+(_m+1)+'月'+_d+'日 '; if(_y>1911){css+='民國'+(((_y-1911)==1)?'元':_y-1911)+'年'+(_m+1)+'月 ';} css+=Ganzhi(_y-1900+36)+'年 '+Ganzhi((_y-1900)*12+_m+14)+'月'; css+='</div><input type="hidden" id="y_" value="'+_y+'"><input type="hidden" id="m_" value="'+(_m+1)+'"></div>'; css+='<table id="PL_rili_box" border="0" cellspacing="0" cellpadding="0">';//星期 css+='<tr id="r1">'; for(i=0;i<7;i++){css+='<td style="width:14.2857%;">'+nStr1[i]+'</td>';} css+='</tr>'; //42天 css+='<tr id="r2">'; for(i=0;i<42;i++){ sD=i-cld.firstWeek; if(sD>=0 && sD < cld.length){ css+='<td'; //顯示今天的顏色 css+=(cld[sD].bColor)?' style="background-color:'+cld[sD].bColor+';">':'>'; css+='<div'; if(cld[sD].bColor || cld[sD].cColor){ //顯示節假日紅色或今天的顏色 css+=(cld[sD].cColor)?' style="background-color:'+cld[sD].cColor+';"':' style="background-color:'+cld[sD].bColor+';"'; } css+='>'; //農曆 css+='<span class="a">'; css+=(Option[0])?cld[sD].JieRi+' ':''; //節日 css+=(Option[1])?' '+cld[sD].Ganzhi:''; //干支 css+='</span>'; //公曆 css+='<span class="b"'; css+=(Option[3])?' style="color:'+cld[sD].aColor+'"':''; css+='><b>'+(sD+1)+'日</b><em>'; if(Option[2]){ //農曆 if(cld[sD].lDay==1){ if(cld[sD].RnYue){css+='閏';} css+=cn_mth[cld[sD].lMonth]; //顯示農曆月份 }else{ if(cld[sD].JieQi){ css+=cld[sD].JieQi; //顯示農曆節氣 }else{ css+=cn_day[cld[sD].lDay]; //顯示農曆日期 } } } css+='</em></span></div>'; //房價 css+='<span id="'+_y+'-'+(_m+1)+'-'+(sD+1)+'" class="c"></span>'; css+='</td>'; }else{ css+='<td> </td>'; } if((i%7==6) && i<41){ if((sD+2)>cld.length){break;}//css+='</tr><tr id="r2">'; } if((i+1)%7==0 && i<41){css+='</tr><tr id="r2" name="'+i+'">';} } css+='</tr></table>'; $(_id).set('html',css); //調整佈局 $("PL_rili_box").getElementById("r1").getLast("td").setStyle("border-right","none"); //手工修改月份 $("PL_rili_tit").getElementById("del").addEvent('click',function(){Press("-");}); $("PL_rili_tit").getElementById("add").addEvent('click',function(){Press("+");}); $("PL_rili_tit").getElementById("today").addEvent('click',function(){Press("=");}); } //手工修改月份 function Press(_t){ try{ hiddenY=parseInt($("PL_rili_tit").getElementById("y_").getProperty("value")); hiddenM=parseInt($("PL_rili_tit").getElementById("m_").getProperty("value")); }catch(e){ hiddenY=tY;hiddenM=tM; } hiddenM--; switch(_t.toLowerCase()){ case "-": if(hiddenM>0){hiddenM--;}else{hiddenM=11;if(hiddenY>0){hiddenY--;}} break; case "+": if(hiddenM<11){hiddenM++;}else{hiddenM=0;hiddenY++;} break; case "=": hiddenY=tY;hiddenM=tM; break; } $(_id).set('html',''); Show(hiddenY,hiddenM,tD); } //傳回月曆物件 (y年,m+1月) function core(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;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.RnYue; //農曆是否閏月 lX=lL?leapDays(lY):monthDays(lY,lM); //農曆當月最後一天 if(n==0){firstLM=lM;} lDPOS[n++]=i-lD+1; } this[i]=new calElement(lY,lM,lD++,lL,'#444','','','',' ',''); //年,月,日,閏月,公曆顏色,背景色,節氣 this[i].Ganzhi=Ganzhi(lDObj.dayCyl++); //天干地支 if((i+this.firstWeek)%7==0){this[i].aColor='red';} //週日顏色 if((i+this.firstWeek)%7==6){this[i].aColor='red';} //週六顏色 //if((i+this.firstWeek)%14==13){this[i].aColor='red';} //週休二日顏色 } // 節氣 this[sTerm(y,m*2)-1].JieQi+=solarTerm[m*2]+' '; this[sTerm(y,m*2+1)-1].JieQi+=solarTerm[m*2+1]+' '; // 顯示國曆節日 for(i in sFtv){ if(typeOf(sFtv[i])=='string'){ if(sFtv[i].match(/^(\d{2})(\d{2})([\s\*])(.+)$/)){ if(Number(RegExp.$1)==(m+1)){ this[Number(RegExp.$2)-1].JieRi+=RegExp.$4; if(RegExp.$3=='*'){this[Number(RegExp.$2)-1].cColor='#ED9495';} } } } } //顯示月週節日 for(i in wFtv){ if(typeOf(wFtv[i])=='string'){ 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].JieRi+=RegExp.$5; } } } } //顯示農曆節日 for(i in lFtv){ if(typeOf(lFtv[i])=='string'){ 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].JieRi+=RegExp.$4;if(RegExp.$3=='*'){this[tmp2].cColor='#ED9495';}} } } } } //黑色星期五 if((this.firstWeek+12)%7==5){this[12].JieRi+='黑色星期五';} //今日顏色 if(y==tY && m==tM){this[tD-1].bColor='#93C162';} } //傳回農曆 y年的總天數 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)); } //傳回農曆 y年閏月的天數 function leapDays(y){ if(leapMonth(y)){return((lunarInfo[y-1900] & 0x10000)?30:29);} else{return(0);} } //傳回農曆 y年閏哪個月 1-12 ,沒閏傳回 0 function leapMonth(y){ return(lunarInfo[y-1900] & 0xf); } //傳回農曆 y年m月的總天數 function monthDays(y,m){ return((lunarInfo[y-1900] & (0x10000>>m))? 30: 29); } //得知某天星期幾 getWeek("2011/4/14"); function getWeek(_day){ var day = new Date(Date.parse(_day)); return(day.getDay()); } //算出農曆,傳入日期物件,傳回農曆日期物件 //該物件屬性有 .year .month .day .RnYue .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; leap=leapMonth(i); //閏哪個月 this.RnYue=false; for(i=1;i<13 && offset>0;i++){ if(leap>0 && i==(leap+1) && this.RnYue==false){//閏月 --i;this.RnYue=true;temp=leapDays(this.year); }else{ temp=monthDays(this.year,i); } //解除閏月 if(this.RnYue==true && i==(leap+1)){this.RnYue=false;} offset-=temp; if(this.RnYue==false){this.monCyl++;} } if(offset==0 && leap>0 && i==leap+1){ if(this.RnYue){ this.RnYue=false; }else{ this.RnYue=true;--i;--this.monCyl; } } if(offset<0){offset+=temp;--i;--this.monCyl;} this.month=i; this.day=offset+1; } //傳回國曆 y年某m+1月的天數 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 Ganzhi(num){ return(Gan[num%10]+Zhi[num%12]); } // 月曆屬性 function calElement(lYear,lMonth,lDay,RnYue,aColor,bColor,cColor,JieQi,JieRi,Ganzhi){ this.lYear=lYear; this.lMonth=lMonth; this.lDay=lDay; //日,農曆 this.RnYue=RnYue; //是否閏月 this.aColor=aColor; //週六周日紅字顏色 this.bColor=bColor; //今天的背景色 this.cColor=cColor; //公曆農曆節假日放假時的顏色 this.JieQi=JieQi; //節氣 this.JieRi=JieRi; //節日 this.Ganzhi=Ganzhi; //日期的天干地支搭配 } // 某年的第n個節氣為幾日(從0小寒起算) function sTerm(y,n){ var offDate=new Date((31556925974.7*(y-1900) + sTermInfo[n]*60000) + Date.UTC(1900,0,6,2,5)); //var offDate=new Date((31556925187.47072*(y-1900) + sTermInfo[n]*60000) + Date.UTC(1900,0,6,2,5)); if(y==2006){//針對 2006 年調整 if(n==8 || n==14){offDate=new Date(offDate -86400 * 1000);} } return(offDate.getUTCDate()); }}
调用方法:
//用法:option=new Array(true,false,true,false);//[0]:是否显示节日;[1]:是否显示天干地支;[2]:是否显示农历;[3]:是否显示法定节日;memo=new Array(518,158);//旅館id,房型idPL_rili('rili',option,memo,true);
我写的万年历插件(含天干地支,农历,阳历,节气,各种节假日等),基于MooTools 1.4相关推荐
- jQuery插件-支持天干地支阴历阳历万年历节假日红字显示记事等功能的日历插件(1)...
要求: jQuery1.4以上就行了. 用途: 可以支持天干地支,阴历,阳历,万年历,节假日红字显示,记事,等功能,有些老外也开发了这个日历插件,可是很不幸,他们不懂中国的老黄历以及<易经> ...
- c语言输出天干地支,农历中天干地支的计算【C代码】
[本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: 计算某天是星期几[C代码] 农历算法简介以及公式 农历中天干地支的计算[C代码] 农历一百年算法(1921~20 ...
- 用c语言程序编写天干地支,农历中天干地支的计算【C代码】
[本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: /* 函数名称:int GetChineseEra(int year,int flag) 函数功能: 返回某年对 ...
- C语言农历天干地支,农历一百年算法(1921~2021)【C语言代码】
[本程序在DEV C++ 4.9.9.2 下编译通过] 有关农历的东西有以下几篇文章: /* 下面是网上一个非常流行的计算农历的算法和C代码.但是,它只能计算 1921年 到 2021年的农历,仅仅只 ...
- python3实现万年历(包括公历、农历、节气、节日)
转载:https://www.cnblogs.com/lanzhi/p/6468355.html #!/usr/local/bin/python3 # coding=utf-8 # Created: ...
- SwiftUI 日期大全之日期日历年月日星期天干地支十二时辰时分秒(教程含源码)
本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 使用Timer制作个clock 显示标准中文 显示农历天干地支十二时 解决方案 1.获取标准日期 //中文公历标准 //20 ...
- 关于天干地支及其计算
以天干地支计算日期是我国悠良的传统文化,最近在看如何计算人的生辰八字,写了个程序,但是只能算年的干支,月.日的干支计算方法太复杂了,望之只能却步,还是乖乖去查万年历比较好.这里记下关于干支的一些东西. ...
- 让炼丹更玄学!苏大博士生用「天干地支」生成随机种子,项目已开源
视学算法报道 编辑:好困 袁榭 [新智元导读]为了顺利炼出模型,搞AI的朋友们真的是什么路子都想过. 机器学习,俗称「炼丹」. 作为AI「黑魔法」的一种,再加点「玄学」又会如何? 最近,有位来 ...
- 天干地支计算公式_天干地支怎么算?年柱的计算方法!
一个八字由四个天干和四个地支组成,又称为年柱.月柱.日柱和时柱,这四柱的天干地支怎么算呢?本篇我们探讨年柱的计算方法. 第一,查万年历. 排四柱八字的顺序为年柱.月柱.日柱和时柱,年.月.日和时四柱的 ...
- 《光剑拾字编》甲子篇: 天干地支
天干地支最早在公元前二千六百九十七(BC-2697)年,於中华始祖黄帝建国时,命大挠氏探察天地之气机,探究五行(金木水火土),始作甲.乙.丙.丁.戊.己.庚.辛.壬.癸等十天干,及子.丑.寅.卯.辰. ...
最新文章
- sqlmap 获取mysql密码_利用sqlmap 获取管理员账号密码
- linux下怎么修改mysql的字符集编码
- 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】
- Kafka设计解析(四):Kafka Consumer解析--转
- Mysql的事务事务的特征事务的隔离级别
- Scala 内部类及外部类
- 三星固态驱动安装失败_三星固态硬盘安装不了Win10无法启动解决方案
- ajax 网页加速,20 种提升网页速度的技巧
- Unity开发VR项目(四)—— 创建VR场景
- csv日文乱码问题的解决
- 理解SparkSteaming窗口函数操作window()
- 麒麟系统云打印安装指导
- 关于Android动画的一点愚见
- 【SSM架构】博客系统开发(七)-登陆界面
- 赛扬处理器_Intel低功耗奔腾/赛扬“变砖”:紧急退市、升级
- ajax如何实现表单验证码,Ajax实现提交表单时验证码自动验证(原创自Zjmainstay)...
- VMware三种联网方式
- 【Solr】之使用springboot完成对【京东搜索商品】案例的实现
- 【Python】基于kNN算法的手写识别系统的实现与分类器测试
- WPF的学习和使用二:WPF 与 Revit 的进阶交互
热门文章
- 自制1寸照片及打印排版
- 申报表计算机代码是什么,金税盘的维护费在申报表上面有一个要填写减免性质代码怎么填啊 ?那个代码是什么呢?...
- 小波与小波包、小波包分解与信号重构、小波包能量特征提取 暨 小波包分解后实现按频率大小分布重新排列(Matlab 程序详解)
- Java开发利器Eclipse和IDEA
- 送书 | 别泡枸杞,别晒步数!7招搞懂健康数据,有型有颜等TA来撩
- 用线性同余法生成伪随机数
- Node.js入门(含NVM、NPM、NVM的安装)-(转载)
- 【信息融合】基于BP神经网络和DS 证据理论实现不确定性信息融合问题附matlab代码
- ANSYS中压电材料的参数分析
- [转]防火墙、防病毒网关、IDS以及该类安全产品开发(文章汇总)