日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

农历php,PHP农历公历转换

發布時間:2024/7/23 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 农历php,PHP农历公历转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

/*

云南省曲靖師范學院計算機科學與工程學院-楊海熙編寫

2009-9-3

*/

class Lunar

{

private $_SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//定義公歷月分天數

private $_LStart = 1950 ;//農歷從1950年開始

private $_LMDay = array(

//差:該年的農歷正月初一到該年公歷1月1日的天數;1~12:農歷月份天數;閏:如有閏月,記錄該月平月天數

// 差 1 2 3 4 5 6 7 8 9 10 11 12 閏

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

);

//是否閏年

private function IsLeapYear($AYear){

return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0));

}

//公歷該月的天數(year:年份; month:月份)

private function GetSMon($year,$month)

{

if($this->IsLeapYear($year) && $month == 2)

return 29;

else

return $this->_SMDay[$month];

}

//農歷名稱轉換

private function LYearName($year)

{

$Name = array("零","一","二","三","四","五","六","七","八","九");

for($i=0;$i<4;$i++)

for($k=0;$k<10;$k++)

if($year[$i]==$k)

$tmp.=$Name[$k];

return $tmp;

}

private function LMonName($month)

{

if($month >=1 && $month <=12 )

{

$Name = array( 1=>"正","二","三","四","五","六","七","八","九","十","十一","十二");

return $Name[$month];

}

return $month;

}

private function LDayName($day)

{

if($day >=1 && $day <=30 )

{

$Name = array( 1 =>

"初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",

"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",

"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"

);

return $Name[$day];

}

return $day;

}

//公歷轉農歷(Sdate:公歷日期)

public function S2L($date)

{

list($year, $month, $day) = explode("-", $date);

if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 )return false;

//獲取查詢日期到當年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;

}

}

}

return mktime(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:是否閏月)

public function L2S($date,$type = 0)

{

list($year, $month, $day) = split("-",$date);

if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 )return false;

$Larray = $this->_LMDay[$year - $this->_LStart];

if($type == 1 && count($Larray)<=12 ) return false;//要求查詢閏,但查無閏月

//如果查詢的農歷是閏月并該年度農歷數組存在閏月數據就獲取

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;

}

}

}

return mktime(0, 0, 0, $Smonth, $Sday, $Syear);

//$Sdate = $Syear."-".$Smonth."-".$Sday;

//return $Sdate;

}

}

?>

總結

以上是生活随笔為你收集整理的农历php,PHP农历公历转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。