Home  >  Article  >  Backend Development  >  PHP class for converting solar calendar to lunar calendar

PHP class for converting solar calendar to lunar calendar

WBOY
WBOYOriginal
2016-07-25 08:56:06880browse
  1. /**
  2. * Class: Class for converting solar calendar to lunar calendar
  3. * Editor: bbs.it-home.org
  4. * /
  5. class Calendar{
  6. var $everyCMonth=array(
  7. 0= >array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),
  8. 1=>array(0,29,30, 29,29,30,29,30,29,30,30,30,29,0,8,2),
  9. 2=>array(0,30,29,30,29,29,30,29, 30,29,30,30,30,0,9,3),
  10. 3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29, 30,10,4),
  11. 4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
  12. 5= >array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),
  13. 6=>array(4,29,30, 30,29,30,29,30,29,30,29,30,29,30,3,7),
  14. 7=>array(0,29,30,29,30,29,30,30, 29,30,29,30,29,0,4,8),
  15. 8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30, 0,5,9),
  16. 9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
  17. 10= >array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),
  18. 11=>array(6,30,29, 30,29,29,30,29,29,30,30,29,30,30,8,12),
  19. 12=>array(0,30,29,30,29,29,30,29, 29,30,30,29,30,0,9,1),
  20. 13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30, 0,10,2),
  21. 14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
  22. 15= >array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),
  23. 16=>array(0,29,30, 29,30,29,30,30,29,30,29,30,29,0,3,5),
  24. 17=>array(2,30,29,29,30,29,30,30, 29,30,30,29,30,29,4,6),
  25. 18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30, 0,5,7),
  26. 19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
  27. 20= >array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),
  28. 21=>array(0,30,29, 30,29,29,30,29,29,30,29,30,30,0,8,10),
  29. 22=>array(5,30,29,30,30,29,29,30, 29,29,30,29,30,30,9,11),
  30. 23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30, 0,10,12),
  31. 24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
  32. 25= >array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),
  33. 26=>array(0,29,29, 30,29,30,29,30,30,29,30,30,29,0,3,3),
  34. 27=>array(0,30,29,29,30,29,30,29, 30,29,30,30,30,0,4,4),
  35. 28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30, 30,5,5),
  36. 29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
  37. 30= >array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),
  38. 31=>array(0,30,30, 29,30,29,30,29,29,30,29,30,29,0,8,8),
  39. 32=>array(0,30,30,30,29,30,29,30, 29,29,30,29,30,0,9,9),
  40. 33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29, 30,10,10),
  41. 34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
  42. 35= >array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),
  43. 36=>array(3,30,29, 29,30,29,29,30,30,29,30,30,30,29,3,1),
  44. 37=>array(0,30,29,29,30,29,29,30, 29,30,30,30,29,0,4,2),
  45. 38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29, 30,5,3),
  46. 39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
  47. 40= >array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),
  48. 41=>array(6,30,30, 29,30,30,29,30,29,29,30,29,30,29,8,6),
  49. 42=>array(0,30,29,30,30,29,30,29, 30,29,30,29,30,0,9,7),
  50. 43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29, 0,10,8),
  51. 44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
  52. 45= >array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),
  53. 46=>array(0,30,29, 29,30,29,29,30,29,30,30,29,30,0,3,11),
  54. 47=>array(2,30,30,29,29,30,29,29, 30,29,30,29,30,30,4,12),
  55. 48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30, 0,5,1),
  56. 49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
  57. 50= >array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),
  58. 51=>array(0,30,29, 30,30,29,30,29,30,29,30,29,30,0,8,4),
  59. 52=>array(5,29,30,29,30,29,30,29, 30,30,29,30,29,30,9,5),
  60. 53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29, 0,10,6),
  61. 54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
  62. 55= >array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),
  63. 56=>array(0,29,30, 29,30,29,29,30,29,30,29,30,30,0,3,9),
  64. 57=>array(8,30,29,30,29,30,29,29, 30,29,30,29,30,29,4,10),
  65. 58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30, 0,5,11),
  66. 59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
  67. 60= >array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),
  68. 61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),
  69. 62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),
  70. 63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
  71. 64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
  72. 65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),
  73. 66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),
  74. 67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),
  75. 68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
  76. 69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
  77. 70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
  78. 71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
  79. 72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
  80. 73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
  81. 74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
  82. 75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
  83. 76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
  84. 77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
  85. 78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
  86. 79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
  87. 80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
  88. 81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
  89. 82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
  90. 83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
  91. 84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
  92. 85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
  93. 86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
  94. 87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
  95. 88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
  96. 89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
  97. 90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
  98. 91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
  99. 92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
  100. 93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
  101. 94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
  102. 95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
  103. 96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
  104. 97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
  105. 98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
  106. 99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
  107. 100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
  108. 101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
  109. 102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
  110. 103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
  111. 104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
  112. 105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
  113. 106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
  114. 107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
  115. 108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
  116. 109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
  117. 110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
  118. 111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
  119. 112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
  120. 113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
  121. 114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
  122. 115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
  123. 116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
  124. 117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
  125. 118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
  126. 119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
  127. 120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
  128. );
  129. ##----------
  130. #农历天干
  131. var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); #农历地支
  132. var $mtwelve=array("null","Zi(rat)","Chou(ox)","Yin(tiger)","卯(Rabbit)","Chen(Dragon)","巳(Snake) ","W(horse)","Wei(sheep)","Shen(monkey)","You(chicken)","Xu(dog)","Hai(pig)"); #lunar month
  133. var $mmonth=array("闰","正","二","三","四","五","六","七","八","九","十"," Eleven","Twelve","month");
  134. var $mday=array("null","First day of junior high school","Second day of junior high school","Third day of junior high school","Fourth day of junior high school","Fifth day of junior high school", "The sixth day of the lunar month", "The seventh day of the lunar month", "The eighth day of the lunar month", "The ninth day of the lunar month", "The tenth day of the lunar month", "Eleventh", "Twelfth", "Thirteenth", "Fourteenth", "Fifteenth", "Sixteen", "seventeen", "eighteen", "nineteen", "twenty", "twenty-one", "twenty-two", "twenty-three", "twenty-four", "twenty-five", "Twenty-six", "Twenty-seven", "Twenty-eight", "Twenty-nine", "Thirty");#lunarday
  135. ##-----------
  136. #Assign initial value
  137. #天Stems and Earthly Branches
  138. var $ten = 0;
  139. var $twelve = 0;
  140. function MyPub($cYear, $cMonth, $cDay){
  141. $total = 11; #The total number of days in the Gregorian calendar to December 21, 1900
  142. $ mtotal = 0; #Total number of days in the lunar calendar
  143. for ($y = 1901; $y < $cYear; $y++){
  144. $total += 365;
  145. if ($y % 4 == 0){
  146. $total++;
  147. }
  148. }
  149. #Add the months of the current year
  150. switch ($cMonth){
  151. case 12:
  152. $total += 30;
  153. case 11:
  154. $total += 31;
  155. case 10:
  156. $total + = 30;
  157. case 9:
  158. $total += 31;
  159. case 8:
  160. $total += 31;
  161. case 7:
  162. $total += 30;
  163. case 6:
  164. $total += 31;
  165. case 5 :
  166. $total += 30;
  167. case 4:
  168. $total += 31;
  169. case 3:
  170. $total += 28;
  171. case 2:
  172. $total += 31;
  173. }
  174. #If the current year is a leap year, still Add one day
  175. if ($cYear % 4 == 0 and $cMonth > 2){
  176. $total++;
  177. }
  178. $total += $cDay - 1;
  179. ##---------- --
  180. #Use the cumulative number of days in the lunar calendar to determine whether it exceeds the number of days in the solar calendar
  181. for ($j = 0; $j <= 120; $j++){
  182. $i = 1;
  183. for ($i = 1; $ i <= 13; $i++){
  184. $mtotal += $this->everyCMonth[$j][$i];
  185. if ($mtotal >= $total){
  186. $flag = 1;
  187. break ;
  188. }
  189. }
  190. if ($flag == 1){
  191. break;
  192. }
  193. }
  194. return array("m" => $j, "d" => $i, "t" => $total, "n" => $mtotal);
  195. }
  196. function Cal($Year, $Month, $Day){
  197. $Par = $this->MyPub($Year, $Month, $Day);
  198. $md = $this->everyCMonth[$Par["m"]][$Par["d"]] - ($Par["n"] - $Par["t"]);
  199. $week = ($Par["t"] + 5) % 7;
  200. if ($this->everyCMonth[$Par["m"]][0] <> 0 and $this->everyCMonth[$ Par["m"]][0] < $Par["d"]){
  201. $mm = $Par["d"] - 1;
  202. }else{
  203. $mm = $Par["d"] ;
  204. }
  205. if ($Par["d"] == $this->everyCMonth[$Par["d"]][0] + 1 and $this->everyCMonth[$Par["d"] ][0] <> 0){
  206. $cMonth = $this->mmonth[0].$this->mmonth[$mm]; #Leap month
  207. }
  208. else{
  209. $cMonth = $this- >mmonth[$mm].$this->mmonth[13];
  210. }
  211. 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);
  212. }
  213. }
  214. //Call example
  215. $test = new Calendar;
  216. $Year = $test->Cal(2004, 2, 20);
  217. echo $Year["year"]."year".$Year["month"].$Year["day"]."week".$Year["week"];
  218. ?> ;
Copy code


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn