公历转换至农历的函数 php

Posted on 2008-08-15 10:22  flourish  阅读(682)  评论(0)    收藏  举报
  1.   <?   
  2.       ###########################################   
  3.       #作者: 沈潋(S&S Lab)                                                                #   
  4.       #E-mail:shenlian@hotmail.com                                                     #   
  5.       #web: http://www.focus-2000.com                                            #   
  6.       ###########################################   
  7.   
  8.       $everymonth=array(   
  9.                         0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),   
  10.                         1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),   
  11.                         2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),   
  12.                         3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),   
  13.                         4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),   
  14.                         5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),   
  15.                         6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),   
  16.                         7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),   
  17.                         8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),   
  18.                         9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),   
  19.                         10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),   
  20.                         11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),   
  21.                         12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),   
  22.                         13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),   
  23.                         14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),   
  24.                         15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),   
  25.                         16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),   
  26.                         17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),   
  27.                         18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),   
  28.                         19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),   
  29.                         20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),   
  30.                         21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),   
  31.                         22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),   
  32.                         23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),   
  33.                         24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),   
  34.                         25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),   
  35.                         26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),   
  36.                         27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),   
  37.                         28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),   
  38.                         29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),   
  39.                         30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),   
  40.                         31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),   
  41.                         32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),   
  42.                         33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),   
  43.                         34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),   
  44.                         35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),   
  45.                         36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),   
  46.                         37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),   
  47.                         38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),   
  48.                         39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),   
  49.                         40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),   
  50.                         41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),   
  51.                         42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),   
  52.                         43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),   
  53.                         44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),   
  54.                         45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),   
  55.                         46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),   
  56.                         47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),   
  57.                         48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),   
  58.                         49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),   
  59.                         50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),   
  60.                         51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),   
  61.                         52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),   
  62.                         53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),   
  63.                         54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),   
  64.                         55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),   
  65.                         56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),   
  66.                         57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),   
  67.                         58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),   
  68.                         59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),   
  69.                         60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),   
  70.                         61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),   
  71.                         62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),   
  72.                         63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),   
  73.                         64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),   
  74.                         65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),   
  75.                         66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),   
  76.                         67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),   
  77.                         68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),   
  78.                         69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),   
  79.                         70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),   
  80.                         71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),   
  81.                         72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),   
  82.                         73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),   
  83.                         74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),   
  84.                         75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),   
  85.                         76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),   
  86.                         77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),   
  87.                         78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),   
  88.                         79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),   
  89.                         80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),   
  90.                         81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),   
  91.                         82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),   
  92.                         83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),   
  93.                         84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),   
  94.                         85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),   
  95.                         86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),   
  96.                         87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),   
  97.                         88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),   
  98.                         89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),   
  99.                         90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),   
  100.                         91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),   
  101.                         92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),   
  102.                         93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),   
  103.                         94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),   
  104.                         95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),   
  105.                         96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),   
  106.                         97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),   
  107.                         98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),   
  108.                         99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),   
  109.                         100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),   
  110.                         101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),   
  111.                         102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),   
  112.                         103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),   
  113.                         104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),   
  114.                         105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),   
  115.                         106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),   
  116.                         107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),   
  117.                         108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),   
  118.                         109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),   
  119.                         110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),   
  120.                         111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),   
  121.                         112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),   
  122.                         113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),   
  123.                         114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),   
  124.                         115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),   
  125.                         116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),   
  126.                         117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),   
  127.                         118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),   
  128.                         119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),   
  129.                         120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)   
  130.                       );   
  131.     ##############################   
  132.       #农历天干   
  133.       $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");   
  134.       #农历地支   
  135.       $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",   
  136.                     "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");   
  137.       #农历月份   
  138.       $mmonth=array("闰","正","二","三","四","五","六",   
  139.                     "七","八","九","十","十一","十二","月");   
  140.       #农历日   
  141.       $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",   
  142.                   "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",   
  143.                   "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");   
  144.     ##############################   
  145.       #星期   
  146.       $weekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");   
  147.   
  148.       #阳历总天数 至1900年12月21日   
  149.       $total=11;   
  150.       #阴历总天数   
  151.       $mtotal=0;   
  152.     ##############################   
  153.       #获得当日日期   
  154.       $today=getdate();   
  155.       if($today["year"]<1901 || $today["year"]>2020) die("年份出错!");   
  156.   
  157.       $cur_wday=$today["wday"];   
  158.   
  159.       for($y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和   
  160.           $total+=365;   
  161.           if ($y%4==0) $total++;   
  162.       }   
  163.   
  164.       switch($today["mon"]) { //再加当年的几个月   
  165.             case 12:   
  166.                   $total+=30;   
  167.             case 11:   
  168.                   $total+=31;   
  169.             case 10:   
  170.                   $total+=30;   
  171.             case 9:   
  172.                   $total+=31;   
  173.             case 8:   
  174.                   $total+=31;   
  175.             case 7:   
  176.                   $total+=30;   
  177.             case 6:   
  178.                   $total+=31;   
  179.             case 5:   
  180.                   $total+=30;   
  181.             case 4:   
  182.                   $total+=31;   
  183.             case 3:   
  184.                   $total+=28;   
  185.             case 2:   
  186.                   $total+=31;   
  187.       }   
  188.   
  189.       if($today["year"]%4 == 0 && $today["mon"]>2) $total++; //如果当年是闰年还要加一天   
  190.   
  191.       $total=$total+$today["mday"]-1; //加当月的天数   
  192.   
  193.       $flag1=0;  //判断跳出循环的条件   
  194.       $j=0;   
  195.       while ($j<=120){  //用农历的天数累加来判断是否超过阳历的天数   
  196.           $i=1;   
  197.           while ($i<=13){   
  198.                 $mtotal+=$everymonth[$j][$i];   
  199.                 if ($mtotal>=$total){   
  200.                     $flag1=1;   
  201.                     break;   
  202.                 }   
  203.                 $i++;   
  204.           }   
  205.           if ($flag1==1) break;   
  206.           $j++;   
  207.       }   
  208.   
  209.       if($everymonth[$j][0]<>0 and $everymonth[$j][0]<$i){   
  210.           $mm=$i-1;   
  211.       }   
  212.       else{   
  213.           $mm=$i;   
  214.       }   
  215.   
  216.       if($i==$everymonth[$j][0]+1 and $everymonth[$j][0]<>0) {   
  217.           $nlmon=$mmonth[0].$mmonth[$mm];#闰月   
  218.       }   
  219.       else {   
  220.           $nlmon=$mmonth[$mm].$mmonth[13];   
  221.       }   
  222.   
  223.       #计算所求月份1号的农历日期   
  224.       $md=$everymonth[$j][$i]-($mtotal-$total);   
  225.       if($md > $everymonth[$j][$i])   
  226.           $md-=$everymonth[$j][$i];   
  227.       $nlday=$mday[$md];   
  228.   
  229.       $nowday=date("Y年n月j日 ").$weekday[$cur_wday]."<br/>".$mten[$everymonth[$j][14]].$mtwelve[$ everymonth[$j][15]]."年".$nlmon.$nlday;   
  230.       echo "<font color=#3333ff>$nowday</font>";   
  231.     ?>  

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3