当前位置:首页 > PHP教程 > php类库 > 列表

PHP实现阳历到农历转换的类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-15 21:59:57 浏览: 评论:0 

这篇文章主要介绍了PHP实现阳历到农历转换的类,实例分析了阳历转换到阴历的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下.

本文实例讲述了PHP实现阳历到农历转换的类,分享给大家供大家参考,具体如下:

  1. <?php 
  2. //PHP阳历到农历转换的一个类 
  3. class Calendar 
  4. //农历每月的天数 
  5.     var $everyCMonth=array
  6.     0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1), 
  7.     1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2), 
  8.     2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3), 
  9.     3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4), 
  10.     4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5), 
  11.     5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6), 
  12.     6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7), 
  13.     7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8), 
  14.     8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9), 
  15.     9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10), 
  16.     10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11), 
  17.     11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12), 
  18.     12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1), 
  19.     13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2), 
  20.     14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3), 
  21.     15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4), 
  22.     16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5), 
  23.     17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6), 
  24.     18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7), 
  25.     19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8), 
  26.     20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9), 
  27.     21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10), 
  28.     22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11), 
  29.     23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12), 
  30.     24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1), 
  31.     25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2), 
  32.     26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3), 
  33.     27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4), 
  34.     28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5), 
  35.     29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6), 
  36.     30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7), 
  37.     31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8), 
  38.     32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9), 
  39.     33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10), 
  40.     34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11), 
  41.     35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12), 
  42.     36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1), 
  43.     37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2), 
  44.     38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3), 
  45.     39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4), 
  46.     40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5), 
  47.     41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6), 
  48.     42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7), 
  49.     43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8), 
  50.     44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9), 
  51.     45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10), 
  52.     46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11), 
  53.     47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12), 
  54.     48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1), 
  55.     49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2), 
  56.     50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3), 
  57.     51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4), 
  58.     52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5), 
  59.     53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6), 
  60.     54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7), 
  61.     55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8), 
  62.     56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9), 
  63.     57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10), 
  64.     58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11), 
  65.     59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12), 
  66.     60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1), 
  67.     61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2), 
  68.     62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3), 
  69.     63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4), 
  70.     64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5), 
  71.     65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6), 
  72.     66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7), 
  73.     67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8), 
  74.     68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9), 
  75.     69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10), 
  76.     70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11), 
  77.     71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12), 
  78.     72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1), 
  79.     73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2), 
  80.     74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3), 
  81.     75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4), 
  82.     76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5), 
  83.     77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6), 
  84.     78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7), 
  85.     79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8), 
  86.     80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9), 
  87.     81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10), 
  88.     82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11), 
  89.     83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12), 
  90.     84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1), 
  91.     85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2), 
  92.     86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3), 
  93.     87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4), 
  94.     88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5), 
  95.     89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6), 
  96.     90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7), 
  97.     91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8), 
  98.     92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9), 
  99.     93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10), 
  100.     94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11), 
  101.     95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12), 
  102.     96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1), 
  103.     97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2), 
  104.     98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3), 
  105.     99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4), 
  106.     100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5), 
  107.     101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6), 
  108.     102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7), 
  109.     103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8), 
  110.     104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9), 
  111.     105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10), 
  112.     106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11), 
  113.     107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12), 
  114.     108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1), 
  115.     109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2), 
  116.     110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3), 
  117.     111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4), 
  118.     112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5), 
  119.     113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6), 
  120.     114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7), 
  121.     115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8), 
  122.     116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9), 
  123.     117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10), 
  124.     118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11), 
  125.     119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12), 
  126.     120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1) 
  127.     ); 
  128. //农历天干 
  129.     var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");    //农历地支 
  130.     var $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)"
  131.                    "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");    //农历月份 
  132.     var $mmonth=array("闰","正","二","三","四","五","六"
  133.                   "七","八","九","十","十一","十二","月"); 
  134.     var $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十"
  135.                 "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十"
  136.                 "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");//农历日 
  137. //赋给初值 
  138. //天干地支 
  139.     var $ten=0; 
  140.     var $twelve=0; 
  141.     function MyPub($cYear,$cMonth,$cDay
  142.     { 
  143.         $total=11;//阳历总天数 至1900年12月21日   
  144.         $mtotal=0;//阴历总天数 
  145.         for ($y=1901;$y<$cYear;$y++) 
  146.         { 
  147.             $total+=365; 
  148.             if ($y%4==0) $total ++; 
  149.         } 
  150.         //再加当年的几个月 
  151.         switch ($cMonth){ 
  152.                  case 12: 
  153.                       $total+=30; 
  154.                  case 11: 
  155.                       $total+=31; 
  156.                  case 10: 
  157.                       $total+=30; 
  158.                  case 9: 
  159.                       $total+=31; 
  160.                  case 8: 
  161.                       $total+=31; 
  162.                  case 7: 
  163.                       $total+=30; 
  164.                  case 6: 
  165.                       $total+=31; 
  166.                  case 5: 
  167.                       $total+=30; 
  168.                  case 4: 
  169.                       $total+=31; 
  170.                  case 3: 
  171.                       $total+=28; 
  172.                  case 2: 
  173.                       $total+=31; 
  174.                } 
  175.  
  176.             //如果当年是闰年还要加一天 
  177.             if ($cYear%4==0 and $cMonth>2) 
  178.             { 
  179.                 $total++; 
  180.             } 
  181.             $total+=$cDay-1; 
  182.             //用农历的天数累加来判断是否超过阳历的天数 
  183.             for($j=0;$j<=120;$j++) 
  184.             { 
  185.                 $i=1; 
  186.                 for($i=1;$i<=13;$i++) 
  187.                 { 
  188.                     $mtotal+=$this->everyCMonth[$j][$i]; 
  189.                     if ($mtotal>=$total
  190.                     { 
  191.                         $flag=1; 
  192.                         break
  193.                     } 
  194.                 } 
  195.                 if ($flag==1)break
  196.             } 
  197.                     return array("m"=>$j,"d"=>$i,"t"=>$total,"n"=>$mtotal); 
  198.     } 
  199.     function Cal($Year,$Month,$Day
  200.     { 
  201.         $Par=$this->MyPub($Year,$Month,$Day); 
  202.  
  203.         $md=$this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]); 
  204.         $week=($Par["t"]+5)%7; 
  205.         if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m"]][0]<$Par["d"]) 
  206.         { 
  207.                 $mm=$Par["d"]-1; 
  208.         }else
  209.                 $mm=$Par["d"]; 
  210.         } 
  211.         if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 and $this->everyCMonth[$Par["d"]][0]<>0) 
  212.         { 
  213.             $cMonth=$this->mmonth[0].$this->mmonth[$mm];//闰月 
  214.         }else
  215.             $cMonth=$this->mmonth[$mm].$this->mmonth[13]; 
  216.         } 
  217.         return array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14]].$this->mtwelve[$this->everyCMonth[$Par["m"]][15]], 
  218.                     "month"=>$cMonth
  219.                     "day"=>$this->mday[$md], 
  220.                     "week"=>$week); 
  221.     } 
  222. /////调用 
  223. $test=new Calendar; 
  224. $Year=$test->Cal(2004,2,20); 
  225. echo $Year["year"]."年".$Year["month"].$Year["day"]."周".$Year["week"]; 
  226. ?> 

希望本文所述对大家的php程序设计有所帮助。

Tags: PHP阳历到农历转换类

分享到: