·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
返回列表 发布新帖

php阳历转农历,2016优化版

352 0
发表于 2020-7-6 08:09:00 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
php阳历转农历,2016优化版
在网上一个原有的源码基础上小小的改动了下,包成函数,便于灵活转换
  1. <?php function nongli($riqi){//优化修改 20160807  $nian=date('Y',strtotime($riqi));$yue=date('m',strtotime($riqi));$ri=date('d',strtotime($riqi));   #农历每月的天数   $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位
复制代码
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.119.235.99,GMT+8, 2024-12-19 09:19 , Processed in 0.178286 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表