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 相关文章推荐
坏狼php学习 计数器实例代码
Jun 15 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
Apr 19 PHP
yii操作cookie实例简介
Jul 09 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
php实现汉字验证码和算式验证码的方法
Mar 07 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
thinkphp实现图片上传功能
Jan 13 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
PHP中“=&gt;
Mar 01 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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
PHP实现过滤各种HTML标签
2015/05/17 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JavaScript实战(原生range和自定义特效)简单实例
2016/08/21 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
详解python的几种标准输出重定向方式
2016/08/15 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
python实现超市商品销售管理系统
2019/11/22 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
女大学生毕业找工作的自我评价
2013/10/03 职场文书
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
教师节倡议书
2014/08/30 职场文书
八项规定整改方案
2014/10/01 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
退休职工欢送会致辞
2015/08/01 职场文书
辞职离别感言
2015/08/04 职场文书