<?
  
###########################################
  #作者: 沈潋(S&S Lab)                      #
  #E-mail:shenlian@hotmail.com              #
  #web: http://www.focus-2000.com & ...    #
  #                                         #
  #版权声明:                                #
  #作者开放版权                             #
  #允许无条件地使用本文件的全部或部分       #
  #可作任何修改或增补                       #
  #如果您使用了本文件,请给作者写一封E-mail #
  #如有问题欢迎同作者联系                   #
  #谢谢您的关注!                            #
  ###########################################

  /*
   *修改:小许
   *mail: san@xfocus.org
   *web : http://www.xfocus.org
   *
   *说实在的,我对古历可以说一窍不通,下面这个数组还是不理解 可是作者的信箱好像不通
   *基本上是依样画葫芦,所以出现错误,见笑见笑,呵呵
   */

  #农历每月的天数
  
$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","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
              
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
              
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");
##############################
  #星期
  
$weekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");

  
#阳历总天数 至1900年12月21日
  
$total=11;
  
#阴历总天数
  
$mtotal=0;
##############################
  #获得当日日期
  
$today=getdate();
  if(
$today["year"]<1901 || $today["year"]>2020) die("年份出错!");

  
$cur_wday=$today["wday"];

  for(
$y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和
       
$total+=365;
       if (
$y%4==0$total++;
  }

  switch(
$today["mon"]) { //再加当年的几个月
         
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(
$today["year"]%== && $today["mon"]>2$total++; //如果当年是闰年还要加一天

  
$total=$total+$today["mday"]-1//加当月的天数

  
$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++;
  }

  if(
$everymonth[$j][0]<>and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补
      
$mm=$i-1;
  }
  else{
      
$mm=$i;
  }

  if(
$i==$everymonth[$j][0]+and $everymonth[$j][0]<>0) {
      
$nlmon=$mmonth[0].$mmonth[$mm];#闰月
  
}
  else {
      
$nlmon=$mmonth[$mm].$mmonth[13];
  }

  
#计算所求月份1号的农历日期
  
$md=$everymonth[$j][$i]-($mtotal-$total);
  if(
$md $everymonth[$j][$i])
      
$md-=$everymonth[$j][$i];
  
$nlday=$mday[$md];

  
$nowday=date("Y年n月j日 ").$weekday[$cur_wday]."<br>".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;
  echo 
"<font color=#3333ff>$nowday</font>";
?> 
posted on 2011-05-25 11:59  Right_MR  阅读(238)  评论(0编辑  收藏  举报