用PHP顯示陰曆代碼(轉)

<? 

  #農曆每月的天數

  $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($today["year"]<1901 || $today["year"]>2020) die("年份出錯!");

 

  $cur_wday=$today["wday"];

 

  for($y=1901;$y<$today["year"];$y++) { //計算到所求日期陽曆的總天數-自1900年12月21日始,先算年的和

       $total+=365;

       if ($y%4==0) $total++;

  }

 

  switch($today["mon"]) { //再加當年的幾個月

         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($today["year"]%4 == 0 && $today["mon"]>2) $total++; //如果當年是閏年還要加一天

 

  $total=$total+$today["mday"]-1; //加當月的天數

 

  $flag1=0;  //判斷跳出循環的條件

  $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日 ").$weekday[$cur_wday]."<br>".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;

  echo "<font color=#3333ff>$nowday</font>";

?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章