zoukankan      html  css  js  c++  java
  • PHP 农历

    <?
      
    ###########################################
      #作者: 沈潋(S&S Lab)                      #
      #E-mail:shenlian@hotmail.com              #
      #web: http://www.focus-2000.com & ...    #
      #                                         #
      #版权声明:                                #
      #作者开放版权                             #
      #允许无条件地使用本文件的全部或部分       #
      #可作任何修改或增补                       #
      #如果您使用了本文件,请给作者写一封E-mail #
      #如有问题欢迎同作者联系                   #
      #谢谢您的关注!                            #
      ###########################################

      /*
       *修改:小许
       *mail: san@xfocus.org
       *web : http://www.xfocus.org
       *
       *说实在的,我对古历可以说一窍不通,下面这个数组还是不理解 可是作者的信箱好像不通
       *基本上是依样画葫芦,所以出现错误,见笑见笑,呵呵
       */

      #农历每月的天数
      
    $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"]%== && $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]<>and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补
          
    $mm=$i-1;
      }
      else{
          
    $mm=$i;
      }

      if(
    $i==$everymonth[$j][0]+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>";
    ?> 
  • 相关阅读:
    ERStudio的使用
    AWK文本处理工具(Linux)
    SubSonic3.0.0.4.1源码包与调用Dll
    实现简单微博功能!(上)
    缓冲区溢出攻击
    移动收入超PC端 盛大文学战略转型初见成效
    Windows错误码解析
    获取Windows操作系统的CPU使用率以及内存使用率
    关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)
    API Monitor简介(API监控工具)
  • 原文地址:https://www.cnblogs.com/wangjiangze/p/2056464.html
Copyright © 2011-2022 走看看