Created
July 19, 2013 11:14
-
-
Save Leask/6038429 to your computer and use it in GitHub Desktop.
Solar to Lunar
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
@ PHP阳历到农历转换的一个类 | |
@ Cal函数 将阳历日期转换成阴历日期 | |
@ returnInput 返回输入的日期 | |
@ Recoded By Androidyue | |
*/ | |
class Calendar | |
{ | |
#农历每月的天数 | |
var $everyCMonth=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) | |
); | |
############################## | |
#农历天干 | |
var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); #农历地支 | |
var $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)", | |
"巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)"); #农历月份 | |
var $mmonth=array("闰","正","二","三","四","五","六", | |
"七","八","九","十","十一","十二","月"); | |
var $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十", | |
"十一","十二","十三","十四","十五","十六","十七","十八","十九","二十", | |
"廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");#农历日 | |
############################## | |
#赋给初值 | |
#天干地支 | |
var $ten=0; | |
var $twelve=0; | |
var $dateInput=null; | |
function MyPub($cYear,$cMonth,$cDay) | |
{ | |
$total=11;#阳历总天数 至1900年12月21日 | |
$mtotal=0;#阴历总天数 | |
for ($y=1901;$y<$cYear;$y++) | |
{ | |
$total+=365; | |
if ($y%4==0) $total ++; | |
} | |
#再加当年的几个月 | |
switch ($cMonth){ | |
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 ($cYear%4==0 and $cMonth>2) | |
{ | |
$total++; | |
} | |
$total+=$cDay-1; | |
############################## | |
#用农历的天数累加来判断是否超过阳历的天数 | |
for($j=0;$j<=120;$j++) | |
{ | |
$i=1; | |
$flag=0; | |
for($i=1;$i<=13;$i++) | |
{ | |
$mtotal+=$this->everyCMonth[$j][$i]; | |
if ($mtotal>=$total) | |
{ | |
$flag=1; | |
break; | |
} | |
} | |
if ($flag==1)break; | |
} | |
return array("m"=>$j,"d"=>$i,"t"=>$total,"n"=>$mtotal); | |
} | |
function Cal($Year,$Month,$Day) | |
{ | |
$Par=$this->MyPub($Year,$Month,$Day); | |
$this-> dateInput=array( 'year'=> $Year, | |
'month'=> $Month, | |
'day'=> $Day | |
); | |
$md=$this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]); | |
$week=($Par["t"]+5)%7; | |
if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m"]][0]<$Par["d"]) | |
{ | |
$mm=$Par["d"]-1; | |
}else{ | |
$mm=$Par["d"]; | |
} | |
if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 and $this->everyCMonth[$Par["d"]][0]<>0) | |
{ | |
$cMonth=$this->mmonth[0].$this->mmonth[$mm];#闰月 | |
}else{ | |
$cMonth=$this->mmonth[$mm].$this->mmonth[13]; | |
} | |
$resultArray=array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14]].$this->mtwelve[$this->everyCMonth[$Par["m"]][15]], | |
"month"=>$cMonth, | |
"day"=>$this->mday[$md], | |
"week"=>$week); | |
$resultArray['week']=$this-> numberToString($resultArray['week']); | |
return $resultArray; | |
} | |
//将数字转换成字符串 | |
private function numberToString($number){ | |
$return=null; | |
switch($number){ | |
case 1: | |
$return = '一'; | |
break; | |
case 2: | |
$return= '二'; | |
break; | |
case 3: | |
$return='三'; | |
break; | |
case 4: | |
$return='四'; | |
break; | |
case 5: | |
$return='五'; | |
break; | |
case 6: | |
$return='六'; | |
break; | |
case 7: | |
$return='七'; | |
break; | |
default: | |
$return='未知'; | |
} | |
return $return; | |
} | |
//输出输入的数据 | |
function returnInput(){ | |
return $this-> dateInput; | |
} | |
} | |
/////调用 | |
$test=new Calendar(); | |
$Year=$test->Cal(2011,6,3); | |
$dateInput=$test-> returnInput(); | |
echo implode('-',$dateInput).'的阴历日期是'.$Year["year"]."年".$Year["month"].$Year["day"]."周".$Year["week"]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment