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 相关文章推荐
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
PHP目录操作实例总结
Sep 27 PHP
PHP读取zip文件的方法示例
Nov 17 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 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新手谈谈我的学习心得
2007/02/25 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
php对mongodb的扩展(初出茅庐)
2012/11/11 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python计算程序运行时间的方法
2014/12/13 Python
Linux下编译安装MySQL-Python教程
2015/02/02 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
使用 Visual Studio Code(VSCode)搭建简单的Python+Django开发环境的方法步骤
2018/12/17 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
如何写出好的Java代码
2014/04/25 面试题
有兼职工作经历的简历自我评价
2014/03/07 职场文书
考察现实表现材料
2014/05/19 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
入团申请书格式
2019/06/20 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python