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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
第八节--访问方式
Nov 16 PHP
PHPWind与Discuz截取字符函数substrs与cutstr性能比较
Dec 05 PHP
php 地区分类排序算法
Jul 01 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
php+mysqli数据库连接的两种方式
Jan 28 PHP
php获得网站访问统计信息类Compete API用法实例
Apr 02 PHP
php实现的日历程序
Jun 18 PHP
php基于jquery的ajax技术传递json数据简单实例
Apr 15 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
php面向对象的用户登录身份验证
Jun 08 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 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 函数学习简单小结
2010/07/08 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
PHP7常量数组用法分析
2016/09/26 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
js 深拷贝函数
2008/12/04 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
JavaScript动态绑定详解
2017/09/14 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python代码过长的换行方法
2018/07/19 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
pandas 将索引值相加的方法
2018/11/15 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
Android interview questions
2016/12/25 面试题
体育节口号
2014/06/19 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
合作意向协议书
2015/01/29 职场文书
学校捐书倡议书
2015/04/27 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
python glom模块的使用简介
2021/04/13 Python
Vue实现下拉加载更多
2021/05/09 Vue.js
Python实现排序方法常见的四种
2021/07/15 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server