php下实现农历日历的代码


Posted in PHP onMarch 07, 2007
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"]%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>"; 
?>
PHP 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
php生成年月日下载列表的方法
Apr 24 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
XHProf报告字段含义的解析
May 17 PHP
thinkPHP模板中for循环与switch语句用法示例
Nov 30 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 #PHP
用PHP 快速生成 Flash 动画的方法
Mar 06 #PHP
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 #PHP
使用php重新实现PHP脚本引擎内置函数
Mar 06 #PHP
15种PHP Encoder的比较
Mar 06 #PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 #PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 #PHP
You might like
Php Cookie的一个使用注意点
2008/11/08 PHP
PHP 简单日历实现代码
2009/10/28 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
For循环中分号隔开的3部分的执行顺序探讨
2014/05/27 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
2019/09/16 Javascript
Vue实现验证码功能
2019/12/03 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
将Dataframe数据转化为ndarry数据的方法
2018/06/28 Python
Python从Excel中读取日期一列的方法
2018/11/28 Python
linux环境下Django的安装配置详解
2019/07/22 Python
Python3并发写文件与Python对比
2019/11/20 Python
Pycharm 安装 idea VIM插件的图文教程详解
2020/02/21 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
python文件路径操作方法总结
2020/12/21 Python
python 高阶函数简单介绍
2021/02/19 Python
护士检查书
2014/01/17 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
党校学习自我鉴定
2014/02/24 职场文书
作文评语大全
2014/04/23 职场文书
普通党员对照检查材料
2014/08/28 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
SQL Server 中的事务介绍
2022/05/20 SQL Server