PHP 实现公历日期与农历日期的互转换
PHP实现公历日期与农历日期的互转换
前言:
今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.
示例代码:
31,28,31,30,31,30,31,31,30,31,30,31);//定义公历月分天数 private$_LStart=1950;//农历从1950年开始 private$_LMDay=array( //差:该年的农历正月初一到该年公历1月1日的天数;1~12:农历月份天数;闰:如有闰月,记录该月平月天数 //差123456789101112闰 array(47,29,30,30,29,30,30,29,29,30,29,30,29), array(36,30,29,30,30,29,30,29,30,29,30,29,30), array(6,29,30,29,30,59,29,30,30,29,30,29,30,29),//五月29闰五月30 array(44,29,30,29,29,30,30,29,30,30,29,30,29), array(33,30,29,30,29,29,30,29,30,30,29,30,30), array(23,29,30,59,29,29,30,29,30,29,30,30,30,29),//三月29闰三月30 array(42,29,30,29,30,29,29,30,29,30,29,30,30), array(30,30,29,30,29,30,29,29,59,30,29,30,29,30),//八月30闰八月29 array(48,30,30,30,29,30,29,29,30,29,30,29,30), array(38,29,30,30,29,30,29,30,29,30,29,30,29), array(27,30,29,30,29,30,59,30,29,30,29,30,29,30),//六月30闰六月29 array(45,30,29,30,29,30,29,30,30,29,30,29,30), array(35,29,30,29,29,30,29,30,30,29,30,30,29), array(24,30,29,30,58,30,29,30,29,30,30,30,29,29),//四月29闰四月29 array(43,30,29,30,29,29,30,29,30,29,30,30,30), array(32,29,30,29,30,29,29,30,29,29,30,30,29), array(20,30,30,59,30,29,29,30,29,29,30,30,29,30),//三月30闰三月29 array(39,30,30,29,30,30,29,29,30,29,30,29,30), array(29,29,30,29,30,30,29,59,30,29,30,29,30,30),//七月30闰七月29 array(47,29,30,29,30,29,30,30,29,30,29,30,29), array(36,30,29,29,30,29,30,30,29,30,30,29,30), array(26,29,30,29,29,59,30,29,30,30,30,29,30,30),//五月30闰五月29 array(45,29,30,29,29,30,29,30,29,30,30,29,30), array(33,30,29,30,29,29,30,29,29,30,30,29,30), array(22,30,30,29,59,29,30,29,29,30,30,29,30,30),//四月30闰四月29 array(41,30,30,29,30,29,29,30,29,29,30,29,30), array(30,30,30,29,30,29,30,29,59,29,30,29,30,30),//八月30闰八月29 array(48,30,29,30,30,29,30,29,30,29,30,29,29), array(37,30,29,30,30,29,30,30,29,30,29,30,29), array(27,30,29,29,30,29,60,29,30,30,29,30,29,30),//六月30闰六月30 array(46,30,29,29,30,29,30,29,30,30,29,30,30), array(35,29,30,29,29,30,29,29,30,30,29,30,30), array(24,30,29,30,58,30,29,29,30,29,30,30,30,29),//四月29闰四月29 array(43,30,29,30,29,29,30,29,29,30,29,30,30), array(32,30,29,30,30,29,29,30,29,29,59,30,30,30),//十月30闰十月29 array(50,29,30,30,29,30,29,30,29,29,30,29,30), array(39,29,30,30,29,30,30,29,30,29,30,29,29), array(28,30,29,30,29,30,59,30,30,29,30,29,29,30),//六月30闰六月29 array(47,30,29,30,29,30,29,30,30,29,30,30,29), array(36,30,29,29,30,29,30,29,30,29,30,30,30), array(26,29,30,29,29,59,29,30,29,30,30,30,30,30),//五月30闰五月29 array(45,29,30,29,29,30,29,29,30,29,30,30,30), array(34,29,30,30,29,29,30,29,29,30,29,30,30), array(22,29,30,59,30,29,30,29,29,30,29,30,29,30),//三月30闰三月29 array(40,30,30,30,29,30,29,30,29,29,30,29,30), array(30,29,30,30,29,30,29,30,59,29,30,29,30,30),//八月30闰八月29 array(49,29,30,29,30,30,29,30,29,30,30,29,29), array(37,30,29,30,29,30,29,30,30,29,30,30,29), array(27,30,29,29,30,58,30,30,29,30,30,29,30,29),//五月29闰五月29 array(46,30,29,29,30,29,29,30,29,30,30,30,29), array(35,30,30,29,29,30,29,29,30,29,30,30,29), array(23,30,30,29,59,30,29,29,30,29,30,29,30,30),//四月30闰四月29 array(42,30,30,29,30,29,30,29,29,30,29,30,29), array(31,30,30,29,30,30,29,30,29,29,30,29,30), array(21,29,59,30,30,29,30,29,30,29,30,29,30,30),//二月30闰二月29 array(39,29,30,29,30,29,30,30,29,30,29,30,29), array(28,30,29,30,29,30,29,59,30,30,29,30,30,30),//七月30闰七月29 array(48,29,29,30,29,29,30,29,30,30,30,29,30), array(37,30,29,29,30,29,29,30,29,30,30,29,30), array(25,30,30,29,29,59,29,30,29,30,29,30,30,30),//五月30闰五月29 array(44,30,29,30,29,30,29,29,30,29,30,29,30), array(33,30,29,30,30,29,30,29,29,30,29,30,29), array(22,30,29,30,59,30,29,30,29,30,29,30,29,30),//四月30闰四月29 array(40,30,29,30,29,30,30,29,30,29,30,29,30), array(30,29,30,29,30,29,30,29,30,59,30,29,30,30),//九月30闰九月29 array(49,29,30,29,29,30,29,30,30,30,29,30,29), array(38,30,29,30,29,29,30,29,30,30,29,30,30), array(27,29,30,29,30,29,59,29,30,29,30,30,30,29),//六月29闰六月30 array(46,29,30,29,30,29,29,30,29,30,29,30,30), array(35,30,29,30,29,30,29,29,30,29,29,30,30), array(24,29,30,30,59,30,29,29,30,29,30,29,30,30),//四月30闰四月29 array(42,29,30,30,29,30,29,30,29,30,29,30,29), array(31,30,29,30,29,30,30,29,30,29,30,29,30), array(21,29,59,29,30,30,29,30,30,29,30,29,30,30),//二月30闰二月29 array(40,29,30,29,29,30,29,30,30,29,30,30,29), array(28,30,29,30,29,29,59,30,29,30,30,30,29,30),//六月30闰六月29 array(47,30,29,30,29,29,30,29,29,30,30,30,29), array(36,30,30,29,30,29,29,30,29,29,30,30,29), array(25,30,30,30,29,59,29,30,29,29,30,30,29,30),//五月30闰五月29 array(43,30,30,29,30,29,30,29,30,29,29,30,30), array(33,29,30,29,30,30,29,30,29,30,29,30,29), array(22,29,30,59,30,29,30,30,29,30,29,30,29,30),//三月30闰三月29 array(41,30,29,29,30,29,30,30,29,30,30,29,30), array(30,29,30,29,29,30,29,30,29,30,30,59,30,30),//十一月30闰十一月29 array(49,29,30,29,29,30,29,30,29,30,30,29,30), array(38,30,29,30,29,29,30,29,29,30,30,29,30), array(27,30,30,29,30,29,59,29,29,30,29,30,30,29),//六月29闰六月30 array(45,30,30,29,30,29,29,30,29,29,30,29,30), array(34,30,30,29,30,29,30,29,30,29,29,30,29), array(23,30,30,29,30,59,30,29,30,29,30,29,29,30),//五月30闰五月29 array(42,30,29,30,30,29,30,29,30,30,29,30,29), array(31,29,30,29,30,29,30,30,29,30,30,29,30), array(21,29,59,29,30,29,30,29,30,30,29,30,30,30),//二月30闰二月29 array(40,29,30,29,29,30,29,29,30,30,29,30,30), array(29,30,29,30,29,29,30,58,30,29,30,30,30,29),//七月29闰七月29 array(47,30,29,30,29,29,30,29,29,30,29,30,30), array(36,30,29,30,29,30,29,30,29,29,30,29,30), array(25,30,29,30,30,59,29,30,29,29,30,29,30,29),//五月29闰五月30 array(44,29,30,30,29,30,30,29,30,29,29,30,29), array(32,30,29,30,29,30,30,29,30,30,29,30,29), array(22,29,30,59,29,30,29,30,30,29,30,30,29,29),//三月29闰三月30 ); //是否闰年 privatefunctionIsLeapYear($AYear) { return($AYear%4==0)&&(($AYear%100!=0)||($AYear%400==0)); } //公历该月的天数(year:年份;month:月份) privatefunctionGetSMon($year,$month) { if($this->IsLeapYear($year)&&$month==2) return29; else return$this->_SMDay[$month]; } //农历名称转换 privatefunctionLYearName($year) { $Name=array("零","一","二","三","四","五","六","七","八","九"); for($i=0;$i<4;$i++) for($k=0;$k<10;$k++) if($year[$i]==$k) $tmp.=$Name[$k]; return$tmp; } privatefunctionLMonName($month) { if($month>=1&&$month<=12) { $Name=array(1=>"正","二","三","四","五","六","七","八","九","十","十一","十二"); return$Name[$month]; } return$month; } privatefunctionLDayName($day) { if($day>=1&&$day<=30) { $Name=array(1=> "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十", "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十", "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十" ); return$Name[$day]; } return$day; } //公历转农历(Sdate:公历日期) publicfunctionS2L($date) { list($year,$month,$day)=explode("-",$date); if($year<=1951||$month<=0||$day<=0||$year>=2051)returnfalse; //获取查询日期到当年1月1日的天数 $date1=strtotime($year."-01-01");//当年1月1日 $date2=strtotime($year."-".$month."-".$day); $days=round(($date2-$date1)/3600/24); $days+=1; //获取相应年度农历数据,化成数组Larray $Larray=$this->_LMDay[$year-$this->_LStart]; if($days<=$Larray[0]) { $Lyear=$year-1; $days=$Larray[0]-$days; $Larray=$this->_LMDay[$Lyear-$this->_LStart]; if($days<$Larray[12]) { $Lmonth=12; $Lday=$Larray[12]-$days; } else { $Lmonth=11; $days=$days-$Larray[12]; $Lday=$Larray[11]-$days; } } else { $Lyear=$year; $days=$days-$Larray[0]; for($i=1;$i<=12;$i++) { if($days>$Larray[$i])$days=$days-$Larray[$i]; else { if($days>30){ $days=$days-$Larray[13]; $Ltype=1; } $Lmonth=$i; $Lday=$days; break; } } } returnmktime(0,0,0,$Lmonth,$Lday,$Lyear); //$Ldate=$Lyear."-".$Lmonth."-".$Lday; //$Ldate=$this->LYearName($Lyear)."年".$this->LMonName($Lmonth)."月".$this->LDayName($Lday); //if($Ltype)$Ldate.="(闰)"; //return$Ldate; } //农历转公历(date:农历日期;type:是否闰月) publicfunctionL2S($date,$type=0) { list($year,$month,$day)=split("-",$date); if($year<=1951||$month<=0||$day<=0||$year>=2051)returnfalse; $Larray=$this->_LMDay[$year-$this->_LStart]; if($type==1&&count($Larray)<=12)returnfalse;//要求查询闰,但查无闰月 //如果查询的农历是闰月并该年度农历数组存在闰月数据就获取 if($Larray[$month]>30&&$type==1&&count($Larray)>=13)$day=$Larray[13]+$day; //获取该年农历日期到公历1月1日的天数 $days=$day; for($i=0;$i<=$month-1;$i++) $days+=$Larray[$i]; //当查询农历日期距离公历1月1日超过一年时 if($days>366||($this->GetSMon($month,2)!=29&&$days>365)) { $Syear=$year+1; if($this->GetSMon($month,2)!=29) $days-=366; else $days-=365; if($days>$this->_SMDay[1]) { $Smonth=2; $Sday=$days-$this->_SMDay[1]; } else { $Smonth=1; $Sday=$days; } } else { $Syear=$year; for($i=1;$i<=12;$i++) { if($days>$this->GetSMon($Syear,$i)) $days-=$this->GetSMon($Syear,$i); else { $Smonth=$i; $Sday=$days; break; } } } returnmktime(0,0,0,$Smonth,$Sday,$Syear); //$Sdate=$Syear."-".$Smonth."-".$Sday; //return$Sdate; } } ?>
teacher.php
//公历转农历 require_once(CORE_."Lunar.php");//加载lunar.php文件 $today=date("Y-m-d"); $lunar=newLunar();//实例化类 $nonglitime=array(); $nl=date("Y-n-d",$lunar->S2L($today)); echo$nl;exit;//转为农历是:2012-05-25
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。