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 相关文章推荐
PHP开发中常用的字符串操作函数
Feb 08 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
php设计模式 FlyWeight (享元模式)
Jun 26 PHP
php加速器eAccelerator的配置参数、API详解
May 05 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
php提交表单发送邮件的方法
Mar 20 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
Aug 16 PHP
laravel异步监控定时调度器实例详解
Jun 21 PHP
Laravel框架源码解析之反射的使用详解
May 14 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实现手机归属地查询API接口实现代码
2012/08/27 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
AngularJS ng-blur 指令详解及简单实例
2016/07/30 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
2018/08/31 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
python time.strptime格式化实例详解
2021/02/03 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
澳大利亚玩具剧场:Toy Playhouse
2019/03/03 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
银行培训心得体会范文
2016/01/09 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS