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递归列出所有文件和目录的代码
Sep 10 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
php curl选项列表(超详细)
Jul 01 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
PHP生成json和xml类型接口数据格式
May 17 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
php闭包中使用use声明变量的作用域实例分析
Aug 09 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
thinkphp 框架数据库切换实现方法分析
May 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数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
python 追踪except信息方式
2020/04/25 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
资料员岗位职责
2013/11/17 职场文书
大学校园毕业自我鉴定
2014/01/15 职场文书
青年文明号事迹材料
2014/01/18 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
标准毕业生自荐信
2014/06/24 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
Redis入门基础常用操作命令整理
2022/06/01 Redis
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript