PHP solar calendar to lunar calendar implementation code

WBOY
Release: 2016-07-25 08:42:54
Original
1164 people have browsed it

A class code for PHP solar calendar to lunar calendar conversion

  1. //PHP A class for converting solar calendar to lunar calendar
  2. class Calendar
  3. {
  4. #The number of days in each month of lunar calendar
  5. var $everyCMonth=array(
  6. 0=>array(8,0,0 ,0,0,0,0,0,0,0,0,0,29,30,7,1),
  7. 1=>array(0,29,30,29,29,30,29,30 ,29,30,30,30,29,0,8,2),
  8. 2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30 ,0,9,3),
  9. 3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),
  10. 4 =>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
  11. 5=>array(0,30,30 ,29,30,30,29,29,30,29,30,29,30,0,2,6),
  12. 6=>array(4,29,30,30,29,30,29,30 ,29,30,29,30,29,30,3,7),
  13. 7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29 ,0,4,8),
  14. 8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),
  15. 9 =>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
  16. 10=>array(0,29,30 ,29,29,30,29,30,29,30,30,30,29,0,7,11),
  17. 11=>array(6,30,29,30,29,29,30,29 ,29,30,30,29,30,30,8,12),
  18. 12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30 ,0,9,1),
  19. 13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),
  20. 14 =>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
  21. 15=>array(0,30,29 ,30,30,29,30,29,30,29,30,29,30,0,2,4),
  22. 16=>array(0,29,30,29,30,29,30,30 ,29,30,29,30,29,0,3,5),
  23. 17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30 ,29,4,6),
  24. 18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),
  25. 19 =>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
  26. 20=>array(0,29,30 ,29,29,30,29,29,30,30,29,30,30,0,7,9),
  27. 21=>array(0,30,29,30,29,29,30,29 ,29,30,29,30,30,0,8,10),
  28. 22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30 ,30,9,11),
  29. 23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),
  30. 24 =>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
  31. 25=>array(4,30,29 ,30,29,30,30,29,30,30,29,30,29,30,2,2),
  32. 26=>array(0,29,29,30,29,30,29,30 ,30,29,30,30,29,0,3,3),
  33. 27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30 ,0,4,4),
  34. 28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),
  35. 29 =>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
  36. 30=>array(6,29,30 ,30,29,29,30,29,29,30,29,30,30,29,7,7),
  37. 31=>array(0,30,30,29,30,29,30,29 ,29,30,29,30,29,0,8,8),
  38. 32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30 ,0,9,9),
  39. 33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),
  40. 34 =>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
  41. 35=>array(0,29,29 ,30,29,30,29,30,30,29,30,30,29,0,2,12),
  42. 36=>array(3,30,29,29,30,29,29,30 ,30,29,30,30,30,29,3,1),
  43. 37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29 ,0,4,2),
  44. 38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),
  45. 39 =>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
  46. 40=>array(0,30,30 ,29,30,29,30,29,29,30,29,30,29,0,7,5),
  47. 41=>array(6,30,30,29,30,30,29,30 ,29,29,30,29,30,29,8,6),
  48. 42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30 ,0,9,7),
  49. 43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),
  50. 44 =>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
  51. 45=>array(0,29,29 ,30,29,29,30,29,30,30,30,29,30,0,2,10),
  52. 46=>array(0,30,29,29,30,29,29,30 ,29,30,30,29,30,0,3,11),
  53. 47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30 ,30,4,12),
  54. 48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),
  55. 49 =>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
  56. 50=>array(0,29,30 ,30,29,30,30,29,29,30,29,30,29,0,7,3),
  57. 51=>array(0,30,29,30,30,29,30,29 ,30,29,30,29,30,0,8,4),
  58. 52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29 ,30,9,5),
  59. 53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),
  60. 54 =>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
  61. 55=>array(3,29,30 ,29,30,29,29,30,29,30,29,30,30,30,2,8),
  62. 56=>array(0,29,30,29,30,29,29,30 ,29,30,29,30,30,0,3,9),
  63. 57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30 ,29,4,10),
  64. 58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),
  65. 59 =>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
  66. 60=>array(6,30,29 ,30,29,30,30,29,30,29,30,29,30,29,7,1),
  67. 61=>array(0,30,29,30,29,30,29,30 ,30,29,30,29,30,0,8,2),
  68. 62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29 ,0,9,3),
  69. 63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
  70. 64 =>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
  71. 65=>array(0,29,30 ,29,30,29,29,30,29,29,30,30,29,0,2,6),
  72. 66=>array(3,30,30,30,29,30,29,29 ,30,29,29,30,30,29,3,7),
  73. 67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30 ,0,4,8),
  74. 68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
  75. 69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
  76. 70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
  77. 71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
  78. 72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
  79. 73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
  80. 74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
  81. 75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
  82. 76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
  83. 77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
  84. 78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
  85. 79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
  86. 80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
  87. 81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
  88. 82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
  89. 83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
  90. 84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
  91. 85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
  92. 86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
  93. 87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
  94. 88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
  95. 89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
  96. 90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
  97. 91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
  98. 92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
  99. 93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
  100. 94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
  101. 95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
  102. 96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
  103. 97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
  104. 98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
  105. 99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
  106. 100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
  107. 101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
  108. 102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
  109. 103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
  110. 104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
  111. 105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
  112. 106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
  113. 107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
  114. 108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
  115. 109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
  116. 110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
  117. 111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
  118. 112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
  119. 113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
  120. 114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
  121. 115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
  122. 116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
  123. 117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
  124. 118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
  125. 119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
  126. 120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
  127. );
  128. ##############################
  129. #农历天干
  130. var $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸"); #农历地支
  131. var $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",
  132. "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)"); #农历月份
  133. var $mmonth=array("闰","正","二","三","四","五","六",
  134. "七","八","九","十","十一","十二","月");
  135. var $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
  136. "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen", "Twenty",
  137. "Twenty-one", "Twenty-two", "Twenty-three", "Twenty-four", "Twenty-five", "Twenty-six", "Twenty-seven", "Twenty-eight", "Twenty-nine", "Thirty" ; =0;
  138. var $twelve=0;
  139. function MyPub($cYear,$cMonth,$cDay)
  140. {
  141. $total=11;#The total number of days in the solar calendar to December 21, 1900
  142. $mtotal=0;#Lunar calendar Total number of days
  143. for ($y=1901;$y<$cYear;$y++)
  144. {
  145. $total+=365;
  146. if ($y%4==0) $total ++;
  147. }
  148. #Add the current year The months of
  149. switch ($cMonth){
  150. case 12:
  151. $total+=30;
  152. case 11:
  153. $total+=31;
  154. case 10:
  155. $total+=30;
  156. case 9:
  157. $total+=31 ;
  158. case 8:
  159. $total+=31;
  160. case 7:
  161. $total+=30;
  162. case 6:
  163. $total+=31;
  164. case 5:
  165. $total+=30;
  166. case 4:
  167. $total+=31 ;
  168. case 3:
  169. $total+=28;
  170. case 2:
  171. $total+=31;
  172. }
  173. #If the current year is a leap year, add one day
  174. if ($cYear%4==0 and $cMonth>2)
  175. {
  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. {
  183. $i=1;
  184. for($i=1;$i< =13;$i++)
  185. {
  186. $mtotal+=$this->everyCMonth[$j][$i];
  187. if ($mtotal>=$total)
  188. {
  189. $flag=1;
  190. break;
  191. }
  192. }
  193. if ($flag==1)break;
  194. }
  195. return array("m"=>$j,"d"=>$i,"t"=>$total,"n"= >$mtotal);
  196. }
  197. function Cal($Year,$Month,$Day)
  198. {
  199. $Par=$this->MyPub($Year,$Month,$Day);
  200. $md=$ this->everyCMonth[$Par["m"]][$Par["d"]]-($Par["n"]-$Par["t"]);
  201. $week=($Par[ "t"]+5)%7;
  202. if ($this->everyCMonth[$Par["m"]][0]<>0 and $this->everyCMonth[$Par["m" ]][0]<$Par["d"])
  203. {
  204. $mm=$Par["d"]-1;
  205. }else{
  206. $mm=$Par["d"];
  207. }
  208. if ($Par["d"]==$this->everyCMonth[$Par["d"]][0]+1 and $this->everyCMonth[$Par["d"]][0] <>0)
  209. {
  210. $cMonth=$this->mmonth[0].$this->mmonth[$mm];#Leap month
  211. }else{
  212. $cMonth=$this->mmonth[ $mm].$this->mmonth[13];
  213. }
  214. return array("year"=>$this->mten[$this->everyCMonth[$Par["m"]][14 ]].$this->mtwelve[$this->everyCMonth[$Par["m"]][15]],
  215. "month"=>$cMonth,
  216. "day"=>$this- >mday[$md],
  217. "week"=>$week);
  218. }
  219. }
  220. /////Call
  221. $test=new Calendar;
  222. $Year=$test->Cal(2014, 12,20);
  223. echo $Year["year"]."year".$Year["month"].$Year["day"]."week".$Year["week"];
  224. ?> ;
  225. Copy code

PHP
Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template