php阳历转农历优化版


Posted in PHP onAugust 08, 2016

本文实例为大家分享了php阳历转农历代码,供大家参考,具体内容如下

<?php
 
function nongli($riqi)
{
//优化修改 20160807 FXL 
$nian=date('Y',strtotime($riqi));
$yue=date('m',strtotime($riqi));
$ri=date('d',strtotime($riqi));
 
 #源码部分原作者:沈潋(S&S Lab) 
 #农历每月的天数 
 $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($nian<1901 || $nian>2020) die("年份出错!"); 
 //$cur_wday=$today["wday"]; //星期中第几天的数字表示
 for($y=1901;$y<$nian;$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和 
    $total+=365; 
    if ($y%4==0) $total++; 
 } 
 switch($yue) { //再加当年的几个月 
     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($nian%4 == 0 && $yue>2) $total++; //如果当年是闰年还要加一天 
 $total=$total+$ri-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日 ")."w".$weekday[$cur_wday]." ".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday; 
 $nowday=$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年 ".$nlmon.$nlday; 
 return $nowday;
}
echo nongli('20160807'); //标准8位

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
discuz的php防止sql注入函数
Jan 17 PHP
php header Content-Type类型小结
Jul 03 PHP
使用php伪造referer的方法 利用referer防止图片盗链
Jan 20 PHP
php自定义错误处理用法实例
Mar 20 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
PHP简单实现无限级分类的方法
May 13 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
php实现表单提交上传文件功能
May 28 PHP
微信JSSDK分享功能图文实例详解
Apr 08 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 #PHP
常用PHP数组排序函数归纳
Aug 08 #PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 #PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 #PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 #PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 #PHP
微信公众号开发之语音消息识别php代码
Aug 08 #PHP
You might like
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php抛出异常与捕捉特定类型的异常详解
2016/10/26 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
利用NPM淘宝的node.js镜像加速nvm
2017/03/27 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python温度转换实例分析
2018/01/17 Python
Python如何急速下载第三方库详解
2020/11/02 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
初中毕业典礼演讲稿
2014/09/09 职场文书
还款承诺书范本
2015/01/20 职场文书
优秀团员自我评价
2015/03/10 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python