http://www.wzbip.com/moban/htm/dates.htm这个万年历是最全的了,
拿去研究吧。。

解决方案 »

  1.   

    用JScript实现公历到农历的日期转换     bhw98 [原作] 
    http://dev.csdn.net/develop/article/25/25263.shtm
      

  2.   

    给你一段代码自己慢慢看看:
    <SCRIPT language=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("鼠 mouse","牛 cattle","虎 tiger","兔 rabbit","龙 dragon","蛇 snake","马 hours","羊 sheep","猴 monkey","鸡 chook","狗 dog","猪 pig");
    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");
    <?
    echo "$s";
    ?>
    //国历节日 *表示放假日
    var sFtv = new Array(
    )//农历节日 *表示放假日
    var lFtv = new Array(
    )//某月的第几个星期几
    var wFtv = new Array(
    )
    /*****************************************************************************
                                          日期计算
    *****************************************************************************///====================================== 传回农历 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 )
    }//====================================== 算出农历, 传入日期物件, 传回农历日期物件
    //                                       该物件属性有 .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) //闰哪个月
       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
    }
      

  3.   

    //==============================传回国历 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 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.isActive   = 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    = ''; //节气
          this.activeFestival = ''; //有活动得日子}//===== 某年的第n个节气为几日(从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)            //当月一日日期   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.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 = 'green'  //周休二日颜色
       }   //节气
       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 = 'black' //清明颜色   //国历节日
       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'
                }
             }
          } 
        //活动时间
       for(i in aFtv){
          if(aFtv[i].match(/^(\d{4})-(\d{2})-(\d{2})([\s\*])(.+)$/)) {     
             if(Number(RegExp.$1)==y ) 
             if( Number(RegExp.$2)==(m+1)) {
                this[Number(RegExp.$3)-1].activeFestival += RegExp.$5 + ' '
                if(RegExp.$4=='') this[Number(RegExp.$3)-1].color = 'red'
                this[Number(RegExp.$3)-1].isActive = true;
             }
          }      
    }      //今日
       if(y==tY && m==tM) this[tD-1].isToday = true;
       
       
    }
      

  4.   

    //====================== 中文日期
    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>1949) yDisplay = ((SY==1)?'元':SY-0)   GZ.innerHTML = '◆ '+yDisplay +'year ◆China caledar 【' + cyclical(SY-1900+36) + '】yuarS &nbsp;【'+Animals[(SY-4)%12]+'】';   YMBG.innerHTML = "&nbsp;" + SY + "<BR>&nbsp;" + 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'; //今日颜色
             if(cld[sD].isActive) sObj.className = 'activeColor'; //活动颜色
             
             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 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;
    //var cursor s-resize      //sYear,sMonth,sDay,week,
          //lYear,lMonth,lDay,isLeap,
          //cYear,cMonth,cDay   if(sObj.innerHTML!='') {      sObj.style.cursor ='help';
          if(cld[d].solarTerms == '' && cld[d].solarFestival == '' && cld[d].lunarFestival == '' && cld[d].activeFestival=='')
             festival = '';
          else
             festival = '<TABLE WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 BGCOLOR="#CCFFCC"><TR><TD>'+
             '<FONT COLOR="#000000" STYLE="font-size:9pt;">'+cld[d].solarTerms + ' ' + cld[d].solarFestival + ' ' + cld[d].lunarFestival+' '+ cld[d].activeFestival + '</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" STYLE="font-size:9pt;">'+
             cld[d].sYear+' - '+cld[d].sMonth+' - '+cld[d].sDay+' '+
             '<font </font><br>'+
             '<font </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 changeTZ() {
       CITY.innerHTML = CLD.TZ.value.substr(6)
       setCookie("TZ",CLD.TZ.selectedIndex)
    }
    function tick() {
       var today
       today = new Date()
       Clock.innerHTML = today.toLocaleString()
       Clock2.innerHTML = TimeAdd(today.toGMTString(), CLD.TZ.value)
       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() {
       resizeTo(780,540) 
       dStyle = detail.style;
       CLD.SY.selectedIndex=tY-1900;
       CLD.SM.selectedIndex=tM;
       drawCld(tY,tM);
       pushBtm('');
       CLD.TZ.selectedIndex=getCookie("TZ");
       changeTZ();
       tick();
    if (tM + 1==10 && tD<4) {alert('Today is holiday!  In2english wish you a very happy holish  !')}
    if (tM + 1==1 && tD<2) {alert(' Newyear coming!  Happy New Year !')}
    }
    //-->
    </SCRIPT><SCRIPT language=VBScript>
    <!--
    '===== 算世界时间
    Function TimeAdd(UTC,T)
       Dim PlusMinus, DST, y,tSave
       If Left(T,1)="-" Then PlusMinus = -1 Else PlusMinus = 1
       UTC=Right(UTC,Len(UTC)-5)
       UTC=Left(UTC,Len(UTC)-4)
       y = Year(UTC)
       TimeAdd=DateAdd("n", (Cint(Mid(T,2,2))*60 + Cint(Mid(T,4,2))) * PlusMinus, UTC)
       '美国日光节约期间: 4月第一个星日00:00 至 10月最後一个星期日00:00
       If Mid(T,6,1)="*" And DateSerial(y,4,(9 - Weekday(DateSerial(y,4,1)) mod 7) ) <= TimeAdd And DateSerial(y,10,31 - Weekday(DateSerial(y,10,31))) >= TimeAdd Then
          TimeAdd=CStr(DateAdd("h", 1, TimeAdd)) & "<FONT STYLE='font-size:18pt;font-family:Wingdings; color:red'>R</FONT>"
       Else
       End If
       TimeAdd = CStr(TimeAdd)
    End Function
    '-->
    </SCRIPT>
      

  5.   

    <?
    //世纪万年历
    #这是唯一的设置-请输入php文件的位置
    $file="http://192.168.1.168/php/rl/s2m.php";
    //#农历每月的天数
    $everymonth=array(
    0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),
    1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),
    2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),
    3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),
    4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
    5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),
    6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),
    7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),
    8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),
    9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
    10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),
    11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),
    12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),
    13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),
    14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
    15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),
    16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),
    17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),
    18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),
    19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
    20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),
    21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),
    22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),
    23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),
    24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
    25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),
    26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),
    27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),
    28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),
    29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
    30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),
    31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),
    32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),
    33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),
    34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
    35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),
    36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),
    37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),
    38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),
    39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
    40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),
    41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),
    42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),
    43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),
    44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
    45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),
    46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),
    47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),
    48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),
    49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
    50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),
    51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),
    52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),
    53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),
    54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
    55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),
    56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),
    57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),
    58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),
    59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
    60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),
    61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),
    62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),
    63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
    64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
    65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),
    66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),
    67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),
    68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
    69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
    70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
    71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
    72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
    73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
    74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
    75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
    76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
    77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
    78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
    79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
    80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
    81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
    82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
    83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
    84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
    85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
    86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
    87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
    88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
    89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
    90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
    91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
    92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
    93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
    94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
    95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
    96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
    97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
    98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
    99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
    100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
    101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
    102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
    103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
    104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
    105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
    106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
    107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
    108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
    109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
    110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
    111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
    112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
    113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
    114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
    115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
    116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
    117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
    118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
    119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
    120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
    );
    ##############################
    #农历天干
    $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
    #农历地支
    $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",
                   "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");
    #农历月份
    $mmonth=array("闰","正","二","三","四","五","六",
                  "七","八","九","十","十一","十二","月");
    #农历日
    $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
                "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
                "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");
      

  6.   

    ##############################
    #赋给初值
    #天干地支
    $ten=0;
    $twelve=0;
    #星期
    $week=5;
    #农历日
    $md=0;
    #农历月
    $mm=0;
    #阳历总天数 至1900年12月21日
    $total=11;
    #阴历总天数
    $mtotal=0;
    ##############################
    #获得当日日期
    $today=getdate();
    #如果没有输入,设为当日日期
    if ($year=="" or $month=="" or ($year<1901 or $year>2020)
        or ($month<1 or $month>12)){
         $year=$today[year];
         $month=$today[mon];
       }
    ##############################
    #计算到所求日期阳历的总天数-自1900年12月21日始
    #先算年的和
    for ($y=1901;$y<$year;$y++){
          $total+=365;
          if ($y%4==0) $total ++;
        }
    #再加当年的几个月
    switch ($month){
             case 12:
                  $total+=30;
             case 11:
                  $total+=31;
             case 10:
                  $total+=30;
             case 9:
                  $total+=31;
             case 8:
                  $total+=31;
             case 7:
                  $total+=30;
             case 6:
                  $total+=31;
             case 5:
                  $total+=30;
             case 4:
                  $total+=31;
             case 3:
                  $total+=28;
             case 2:
                  $total+=31;
           }
    #如果当年是闰年还要加一天
    if ($year%4==0 and $month>2){
         $total++;
        }
    #顺便算出当月1日星期几
    $week=($total+$week)%7;
    ##############################
    #用农历的天数累加来判断是否超过阳历的天数
    $flag1=0;#判断跳出循环的条件
    $j=0;
    while ($j<=120){
          $i=1;
          while ($i<=13){
                $mtotal+=$everymonth[$j][$i];
                if ($mtotal>=$total){
                     $flag1=1;
                     break;
                   }
                $i++;
              }
          if ($flag1==1) break;
          $j++;
        }
    ##############################
    #计算所求月份1号的农历日期
    $md=$everymonth[$j][$i]-($mtotal-$total);
    #月头空开的天数
    $k=$week;
    #是否跨越一年
    switch ($month){
             case 1:
             case 3:
             case 5:
             case 7:
             case 8:
             case 10:
             case 12:
                  $dd=31;
                  break;
             case 4:
             case 6:
             case 9:
             case 11:
                  $dd=30;
                  break;
             case 2:
                  if ($year%4==0){
                      $dd=29;
                     }else{
                      $dd=28;
                     }
                  break;
           }
    #是否跨越一年
    $ty=0;
    if ((($everymonth[$j][0]<>0 and $i==13) or ($everymonth[$j][0]==0 and $i==12))
           and $mtotal-$total<$dd) $ty=1;
    ?>
    <html>
    <head>
    <title>世纪万年历</title>
    <style type="text/css">
    <!--
    input { font-size:9pt;}
    A:link {text-decoration: underline; font-size:9pt;color:000059}
    A:visited {text-decoration: underline; font-size:9pt;color:000059}
    A:active {text-decoration: none; font-size:9pt}
    A:hover {text-decoration:underline;color:red}
    body,table {font-size: 9pt}
    tr,td{font-size:9pt}
    -->
    </style>
    </head>
    <body alink="#FF0000" link="#000099" vlink="#CC6600" topmargin="8" leftmargin="0" bgColor="#FFFFFF">
    <?
    //打印年月抬头
    echo "<p align=\"center\"><font size=\"6\"><b>".$year."年".$month."月</b></font></p>\n";
    if($ty==0)
    {
    echo "<p align=\"center\"><b><font size=\"4\">".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年</font></b></p>";
    }
    else
    {
    echo "<p align=\"center\"><b><font size=\"4\">".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."/".$mten[$everymonth[$j+1][14]].$mtwelve[$everymonth[$j+1][15]]."年</font></b></p>";
    }
    ?>
      

  7.   

    <div align="center">
      <center>
      <table border="1" width="85%">
        <tr>
          <td align="center" bgcolor="#CCCCCC"><font color="#FF0000"><b>星期日</b></font></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期一</b></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期二</b></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期三</b></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期四</b></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期五</b></td>
          <td width="14%" align="center" bgcolor="#CCCCCC"><b>星期六</b></td>
        </tr>
    <?
    $day=1;
    $line=0;
    while ($day<=$dd){
       echo "<tr>\n";
       for ($s=0;$s<=6;$s++){
             if ($k<>0 or $day>$dd){
                  echo "<td width=\"14%\" align=\"center\"> </td>\n";
                  $k--;
             }else{
    //设置字符颜色
                   switch ($s){
                            case 1:
                            case 2:
                            case 3:
                            case 4:
                            case 5:
                                 $color="#000000";
                                 break;
                            case 0:
                                 $color="#FF0000";
                                 break;
                            case 6:
                                 $color="#008000";
                                 break;
                          }
    #生成中文农历
                   if ($md==1){#1日打印月份
                        if ($everymonth[$j][0]<>0 and $everymonth[$j][0]<$i){
                            $mm=$i-1;
                        }else{
                            $mm=$i;
                        }
                        if ($i==$everymonth[$j][0]+1 and $everymonth[$j][0]<>0) $chi=$mmonth[0].$mmonth[$mm];#闰月
                        else $chi=$mmonth[$mm].$mmonth[13];
                   }else{
                        $chi=$mday[$md];
                   }
                   echo "<td width=\"14%\" align=\"center\"><font color=\"$color\"><b>$day </b> <b><font size=\"2\">$chi</font></b></font></td>\n";
                   $day++;
                   $md++;
                   if ($md>$everymonth[$j][$i]){
                        $md=1;
                        $i++;
                      }
                   if (($i>12 and $everymonth[$j][0]==0) or ($i>13 and $everymonth[$j][0]<>0)){
                         $i=1;
                         $j++;
                      }
               }
           }
       echo "</tr>\n";
       $line++;
    }
    ?>
      </table>
      </center>
    </div>
    <?php
    #补足空行
    for ($l=1;$l<=(6-$line);$l++){
          echo "<table border=\"0\" width=\"100%\">\n";
          echo "<tr>\n";
          echo "<td width=\"100%\"><font color=\"#CCFFFF\">a</font></td>\n";
          echo "</tr>\n";
          echo "</table>\n";
        }
    #打印上一月,下一月
    $ly=$ny=$year;
    $last=$month-1;
    if ($last==0){
         $last=12;
         $ly--;
       }
    $next=$month+1;
    if ($next==13){
         $next=1;
         $ny++;
       }
    if ($ly>=1901)
    echo "<p align=\"center\"><a href=\"".$file."?year=".$ly."&month=".$last."\">&lt;&lt;上一个月</a>&nbsp;&nbsp;&nbsp;\n";
    else
    echo "<p align=\"center\">";
    if ($ny<=2020)
    echo "<a href=\"".$file."?year=".$ny."&month=".$next."\">下一个月&gt;&gt;</a></p>\n";
    ?>
     <?php
    echo "<form method=\"POST\" action=\"".$file."\">\n";
    ?>
      <p align="center"><font color="#000000">年份:</font><select size="1" name="year">
      <option>2020</option>
      <option>2019</option>
      <option>2018</option>
      <option>2017</option>
      <option>2016</option>
      <option>2015</option>
      <option>2014</option>
      <option>2013</option>
      <option>2012</option>
      <option>2011</option>
      <option>2010</option>
      <option>2009</option>
      <option>2008</option>
      <option>2007</option>
      <option>2006</option>
      <option>2005</option>
      <option>2004</option>
      <option>2003</option>
      <option>2002</option>
      <option>2001</option>
      <option selected>2000</option>
      <option>1999</option>
      <option>1998</option>
      <option>1997</option>
      <option>1996</option>
      <option>1995</option>
      <option>1994</option>
      <option>1993</option>
      <option>1992</option>
      <option>1991</option>
      <option>1990</option>
      <option>1989</option>
      <option>1988</option>
      <option>1987</option>
      <option>1986</option>
      <option>1985</option>
      <option>1984</option>
      <option>1983</option>
      <option>1982</option>
      <option>1981</option>
      <option>1980</option>
      <option>1979</option>
      <option>1978</option>
      <option>1977</option>
      <option>1976</option>
      <option>1975</option>
      <option>1974</option>
      <option>1973</option>
      <option>1972</option>
      <option>1971</option>
      <option>1970</option>
      <option>1969</option>
      <option>1968</option>
      <option>1967</option>
      <option>1966</option>
      <option>1965</option>
      <option>1964</option>
      <option>1963</option>
      <option>1962</option>
      <option>1961</option>
      <option>1960</option>
      <option>1959</option>
      <option>1958</option>
      <option>1957</option>
      <option>1956</option>
      <option>1955</option>
      <option>1954</option>
      <option>1953</option>
      <option>1952</option>
      <option>1951</option>
      <option>1950</option>
      <option>1949</option>
      <option>1948</option>
      <option>1947</option>
      <option>1946</option>
      <option>1945</option>
      <option>1944</option>
      <option>1943</option>
      <option>1942</option>
      <option>1941</option>
      <option>1940</option>
      <option>1939</option>
      <option>1938</option>
      <option>1937</option>
      <option>1936</option>
      <option>1935</option>
      <option>1934</option>
      <option>1933</option>
      <option>1932</option>
      <option>1931</option>
      <option>1930</option>
      <option>1929</option>
      <option>1928</option>
      <option>1927</option>
      <option>1926</option>
      <option>1925</option>
      <option>1924</option>
      <option>1923</option>
      <option>1922</option>
      <option>1921</option>
      <option>1920</option>
      <option>1919</option>
      <option>1918</option>
      <option>1917</option>
      <option>1916</option>
      <option>1915</option>
      <option>1914</option>
      <option>1913</option>
      <option>1912</option>
      <option>1911</option>
      <option>1910</option>
      <option>1909</option>
      <option>1908</option>
      <option>1907</option>
      <option>1906</option>
      <option>1905</option>
      <option>1904</option>
      <option>1903</option>
      <option>1902</option>
      <option>1901</option>
      &nbsp;
      </select><font color="#000000">年</font><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;
      月份:<select size="1" name="month">
      <option selected>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
      <option>6</option>
      <option>7</option>
      <option>8</option>
      <option>9</option>
      <option>10</option>
      <option>11</option>
      <option>12</option>
      &nbsp;
      </select>月&nbsp;&nbsp;&nbsp;&nbsp; </font><input type="submit" value="查询" name="B1"></p>
    </form>
    </body>
    </html>