php计算当前农历的类 不指定

jed , 2009-5-12 16:14 , 代码编程 , 评论(0) , 阅读(4256) , Via 本站原创 | |


function getNow(){    
  ###########################################    

  #农历每月的天数    
  $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"]%4 == 0 && $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]<>0 and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补    
      $mm=$i-1;    
  }    
  else{    
      $mm=$i;    
  }    
  
  if($i==$everymonth[$j][0]+1 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]." ".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;    
  return $nowday;    
  }  

$now=getnow();
echo $now;

//2009年5月12日 星期二 己丑(牛)年四月十八


Tags: , , ,
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]