- A class for converting PHP solar to lunar calendar
- 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", "a", "B", "C", "Ding", "e", "own", "Geng", "Xin", "Ren", "decyl"); #农历地支
- var $mtwelve =array ("null", "Child (Rat)", "Ugly (ox)", "Yin (Tiger)", "Mao (Rabbit)", "Chen (Dragon)",
- "(Snake)", "Noon (horse)", "Not (sheep)", "Shen (Monkey)", "Unitary (chicken)", "Xu (dog)", "Hai (pig)"); #农历月份
- var $mmonth =array ("Leap", "positive", "two", "three", "four", "five", "six",
- "Seven", "eight", "Nine", "Ten", "11", "12", "month");
- var $mday =array ("null", "the Junior", "Second day", "Third Day", "four", "Duanwu", "Arrest", "When初七because", "Holidays", "Penggushan", "decade",
- "11", "12", "13", "14", "XV", "16", "17", "18", "19", "20",
- "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"); #农历日
- ##############################
- #赋给初值
- #天干地支
- var $ten = 0;
- var $twelve = 0;
- function MyPub ($cYear, $cMonth, $cDay)
- {
- $total =11, #阳历总天数 until December 21, 1900
- $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;
- 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" and "=" $i, "t" = = $total, "n" = $mtotal);
- }
- Function CALs ($Year, $Month, $Day)
- {
- $Par = $this->mypub ($Year, $Month, $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];
- }
- Return Array ("Year" = $this->mten[$this->everycmonth[$Par ["M"]][14]]. $this->mtwelve[$this everycmonth[$Par ["M"]][15]],
- "Month" = $cMonth,
- "Day" = $this->mday[$MD],
- "Week" = $week);
- }
- }
- Call
- $test =new Calendar;
- $Year = $test->cal (2004,2,20);
- echo $Year ["Year"]. " Year ". $Year [" Month "]. $Year [" Day "]." Week ". $Year [" Week "];
- ?>
Copy Code
|