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程序设计有所帮助。