加入收藏 | 设为首页 | 会员中心 | 我要投稿 岳阳站长网 (https://www.0730zz.com.cn/)- 科技、建站、数据库平台、数据湖、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-06-21 09:55:50 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP实现阳历到农历转换的类,实例分析了阳历转换到阴历的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下. 本文实例讲述了PHP实现阳历到农历转换的类,分享给大家供大家参考,具体如下: ?php //PHP阳历到农历转换的一个类 class
  这篇文章主要介绍了PHP实现阳历到农历转换的类,实例分析了阳历转换到阴历的原理与实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下.
 
  本文实例讲述了PHP实现阳历到农历转换的类,分享给大家供大家参考,具体如下:
 
  <?php
  //PHP阳历到农历转换的一个类
  class Calendar
  {
  //农历每月的天数
      var $everyCMonth=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)
      );
  //农历天干
      var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");    //农历地支
      var $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",
                     "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");    //农历月份
      var $mmonth=array("闰","正","二","三","四","五","六",
                    "七","八","九","十","十一","十二","月");
      var $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
                  "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
                  "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");//农历日
  //赋给初值
  //天干地支
      var $ten=0;
      var $twelve=0;
      function MyPub($cYear,$cMonth,$cDay)
      {
          $total=11;//阳历总天数 至1900年12月21日   
          $mtotal=0;//阴历总天数
          for ($y=1901;$y<$cYear;$y++)
          {
              $total+=365;
              if ($y%4==0) $total ++;
          }
          //再加当年的几个月
          switch ($cMonth){
                   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 ($cYear%4==0 and $cMonth>2)
              {
                  $total++;
              }
              $total+=$cDay-1;
              //用农历的天数累加来判断是否超过阳历的天数
              for($j=0;$j<=120;$j++)
              {
                  $i=1;
                  for($i=1;$i<=13;$i++)
                  {
                      $mtotal+=$this->everyCMonth[$j][$i];
                      if ($mtotal>=$total)
                      {
                          $flag=1;
                          break;
                      }
                  }
                  if ($flag==1)break;
              }
                      return array("m"=>$j,"d"=>$i,"t"=>$total,"n"=>$mtotal);
      }
      function Cal($Year,$Month,$Day)
      {
          $Par=$this->MyPub($Year,$Month,$Day);
   
          $md=$this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]);
          $week=($Par["t"]+5)%7;
          if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m"]][0]<$Par["d"])
          {
                  $mm=$Par["d"]-1;
          }else{
                  $mm=$Par["d"];
          }
          if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 and $this->everyCMonth[$Par["d"]][0]<>0)
          {
              $cMonth=$this->mmonth[0].$this->mmonth[$mm];//闰月
          }else{
              $cMonth=$this->mmonth[$mm].$this->mmonth[13];
          }
          return array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14]].$this->mtwelve[$this->everyCMonth[$Par["m"]][15]],
                      "month"=>$cMonth,
                      "day"=>$this->mday[$md],
                      "week"=>$week);
      }
  }
  /////调用
  $test=new Calendar;
  $Year=$test->Cal(2004,2,20);
  echo $Year["year"]."年".$Year["month"].$Year["day"]."周".$Year["week"];
  ?>
  希望本文所述对大家的php程序设计有所帮助。

(编辑:岳阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读