• php公立转农历


    <?php
     
    function nongli($riqi)
    {
    //优化修改 20160807 FXL 
    $nian=date('Y',strtotime($riqi));
    $yue=date('m',strtotime($riqi));
    $ri=date('d',strtotime($riqi));
     
      #源码部分原作者:沈潋(S&S Lab) 
      #农历每月的天数 
      $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($nian<1901 || $nian>2020) die("年份出错!"); 
      //$cur_wday=$today["wday"]; //星期中第几天的数字表示
      for($y=1901;$y<$nian;$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和 
           $total+=365; 
           if ($y%4==0) $total++; 
      } 
      switch($yue) { //再加当年的几个月 
             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($nian%4 == 0 && $yue>2) $total++; //如果当年是闰年还要加一天 
      $total=$total+$ri-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日 ")."w".$weekday[$cur_wday]." ".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday; 
      $nowday=$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年 ".$nlmon.$nlday; 
      return $nowday;
    }
    echo nongli('20160807'); //标准8位
  • 相关阅读:
    微信小程序自定义navigationBar
    微信小程序-自动定位并将经纬度解析为具体地址
    a conexant audio couldnot befound
    平衡二叉树(AVL)java实现
    二叉树的各种非递归遍历
    选择排序
    快速排序
    冒泡排序
    数组洗牌
    haffman树c实现
  • 原文地址:https://www.cnblogs.com/objects/p/7122671.html
Copyright © 2020-2023  润新知