php陽歷轉農歷優(yōu)化版
來源:易賢網 閱讀:854 次 日期:2016-08-29 14:01:22
溫馨提示:易賢網小編為您整理了“php陽歷轉農歷優(yōu)化版”,方便廣大網友查閱!

本文實例為大家分享了php陽歷轉農歷代碼,供大家參考,具體內容如下

<?php

function nongli($riqi)

{

//優(yōu)化修改 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; //判斷跳出循環(huán)的條件 

 $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位

以上就是本文的全部內容,希望對大家的學習有所幫助

更多信息請查看網絡編程
易賢網手機網站地址:php陽歷轉農歷優(yōu)化版
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:526150442(9:00—18:00)版權所有:易賢網