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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
《APMServ 5.1.2》使用图解
Oct 23 PHP
php图片验证码代码
Mar 27 PHP
一个php导出oracle库的php代码
Apr 20 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
PHP函数超时处理方法
Feb 14 PHP
Yii中的cookie的发送和读取
Jul 27 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
php无限级分类实现评论及回复功能
Feb 18 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
PHP中国际化的字符串排序和比较对象详解
Aug 23 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获取mysql版本的几种方法小结
2008/03/25 PHP
PHP JSON 数据解析代码
2010/05/26 PHP
ini_set的用法介绍
2014/01/07 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
兼容ie和firefox js关闭代码
2008/12/11 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
jquery实现图片翻页效果
2013/12/23 Javascript
纯JS实现旋转图片3D展示效果
2015/04/12 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
在Python中使用元类的教程
2015/04/28 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
美国女性运动零售品牌:Lady Foot Locker
2017/05/12 全球购物
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
程序员经常用到的UNIX命令
2015/04/13 面试题
党员教师工作决心书
2014/03/13 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python