公历转换至农历的函数 php - IDC资讯网_站长学院 - Java PHP Flex Python Ajax CSS 编程 开源 学习 总结 分享

公历转换至农历的函数 php

[ 2008-03-18 12:06 | by 草山湖 ]

    <?
      ###########################################
      #作者: 沈潋(S&S Lab)                                                                #
      #E-mail:shenlian@hotmail.com                                                     #
      #web: http://www.focus-2000.com                                            #
      ###########################################

      $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;
      echo "<font color=#3333ff>$nowday</font>";
    ?>
 
编程语言 | 评论(0) | 引用(0) | 阅读(3922)