亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php實現陽歷陰歷互轉的方法

2024-05-04 23:39:56
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了php實現陽歷陰歷互轉的方法,同時還能獲取干支紀年,生肖,以及相應的陰歷的中文叫法等,感興趣的小伙伴們可以參考一下

最近對陽歷轉陰歷從而得到相應節日的算法這方面比較感興趣,于是就在網上搜了一圈。不錯,還算是找到一個比較不錯的php類,實現了將陽歷轉換為陰歷(農歷),陰歷轉換為陽歷的算法,同時還能獲取干支紀年,生肖,以及相應的陰歷的中文叫法等等,功能還是挺齊全的,在這里分享給大家。

具體類代碼如下:

 

 
  1. class Lunar{  
  2. var $MIN_YEAR=1891;  
  3. var $MAX_YEAR=2100;  
  4. var $lunarInfo=array(  
  5. array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),array(5,1,26,43344),array(0,2,13,59728),  
  6. array(0,2,2,27296),array(3,1,22,44368),array(0,2,10,43856),array(8,1,30,19304),array(0,2,19,19168),array(0,2,8,42352),  
  7. array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),array(0,2,13,22176),array(0,2,2,39632),  
  8. array(2,1,22,19176),array(0,2,10,19168),array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),  
  9. array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),array(7,2,1,18872),array(0,2,20,18800),  
  10. array(0,2,8,42160),array(5,1,28,45656),array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),  
  11. array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),array(0,2,17,54432),array(0,2,6,59984),  
  12. array(5,1,26,27976),array(0,2,14,23248),array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),  
  13. array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),array(0,2,5,22176),array(4,1,25,43736),  
  14. array(0,2,13,9680),array(0,2,2,37584),array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),  
  15. array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),array(3,1,24,21176),array(0,2,12,21168),  
  16. array(8,1,31,43344),array(0,2,18,59728),array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),  
  17. array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),array(0,2,9,55632),array(7,1,30,23208),  
  18. array(0,2,17,22176),array(0,2,6,38608),array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),  
  19. array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),array(6,1,28,38608),array(0,2,16,38320),  
  20. array(0,2,5,18864),array(4,1,25,42168),array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),  
  21. array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),array(0,2,15,18800),array(0,2,4,25776),  
  22. array(3,1,23,27216),array(0,2,10,59984),array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),  
  23. array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),array(0,2,1,55888),array(2,1,22,23208),  
  24. array(0,2,9,22176),array(7,1,29,43736),array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),  
  25. array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),array(0,2,19,19360),array(0,2,8,42416),  
  26. array(6,1,28,21176),array(0,2,16,21168),array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),  
  27. array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),array(0,2,6,53856),array(5,1,26,59696),  
  28. array(0,2,13,54576),array(0,2,3,23200),array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),  
  29. array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),array(5,1,24,55968),array(0,2,12,46496),  
  30. array(0,2,1,22224),array(2,1,22,19160),array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),  
  31. array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),array(0,2,11,37744),array(8,2,1,18808),  
  32. array(0,2,19,18800),array(0,2,8,25776),array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),  
  33. array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),array(7,1,29,54440),array(0,2,17,54432),  
  34. array(0,2,5,55888),array(5,1,26,23208),array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),  
  35. array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),array(0,2,15,44368),array(0,2,5,21920),  
  36. array(4,1,24,42448),array(0,2,12,42416),array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),  
  37. array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),array(0,2,3,42352),array(4,1,24,21104),  
  38. array(0,2,10,53856),array(8,1,30,59696),array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),  
  39. array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),array(2,1,21,55592),array(0,2,9,54560)  
  40. );  
  41. /**  
  42. * 將陽歷轉換為陰歷  
  43. * @param year 公歷-年  
  44. * @param month 公歷-月  
  45. * @param date 公歷-日  
  46. */  
  47. function convertSolarToLunar($year,$month,$date){//debugger;  
  48. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  49. if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){  
  50. return array(1891,'正月','初一','辛卯',1,1,'兔');  
  51. }  
  52. return $this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));  
  53. }  
  54. function convertSolarMonthToLunar($year,$month){  
  55. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  56. if($year==$this->MIN_YEAR&&$month<=2&&$date<=9){  
  57. return array(1891,'正月','初一','辛卯',1,1,'兔');  
  58. }  
  59. $month_days_ary=array(31,28,31,30,31,30,31,31,30,31,30,31);  
  60. $dd=$month_days_ary[$month];  
  61. if($this->isLeapYear($year)&& $month==2)$dd++;  
  62. $lunar_ary=array();  
  63. for ($i=1;$i<$dd;$i++){  
  64. $array=$this->getLunarByBetween($year,$this->getDaysBetweenSolar($year,$month,$i,$yearData[1],$yearData[2]));  
  65. $array[]=$year.'-'.$month.'-'.$i;  
  66. $lunar_ary[$i]=$array;  
  67. }  
  68. return $lunar_ary;  
  69. }  
  70. /**  
  71. * 將陰歷轉換為陽歷  
  72. * @param year 陰歷-年  
  73. * @param month 陰歷-月,閏月處理:例如如果當年閏五月,那么第二個五月就傳六月,相當于陰歷有13個月,只是有的時候第13個月的天數為0  
  74. * @param date 陰歷-日  
  75. */  
  76. function convertLunarToSolar($year,$month,$date){  
  77. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  78. $between=$this->getDaysBetweenLunar($year,$month,$date);  
  79. $res=mktime(0,0,0,$yearData[1],$yearData[2],$year);  
  80. $res=date('Y-m-d',$res+$between*24*60*60);  
  81. $day=explode('-',$res);  
  82. $year=$day[0];  
  83. $month=$day[1];  
  84. $day=$day[2];  
  85. return array($year,$month,$day);  
  86. }  
  87. /**  
  88. * 判斷是否是閏年  
  89. * @param year  
  90. */  
  91. function isLeapYear($year){  
  92. return (($year%4==0&&$year%100!=0)||($year%400==0));  
  93. }  
  94. /**  
  95. * 獲取干支紀年  
  96. * @param year  
  97. */  
  98. function getLunarYearName($year){  
  99. $sky=array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');  
  100. $earth=array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未');  
  101. $year=$year.'';  
  102. return $sky[$year{3}].$earth[$year%12];  
  103. }  
  104. /**  
  105. * 根據陰歷年獲取生肖  
  106. * @param year 陰歷年  
  107. */  
  108. function getYearZodiac($year){  
  109. $zodiac=array('猴','雞','狗','豬','鼠','牛','虎','兔','龍','蛇','馬','羊');  
  110. return $zodiac[$year%12];  
  111. }  
  112. /**  
  113. * 獲取陽歷月份的天數  
  114. * @param year 陽歷-年  
  115. * @param month 陽歷-月  
  116. */  
  117. function getSolarMonthDays($year,$month){  
  118. $monthHash=array('1'=>31,'2'=>$this->isLeapYear($year)?29:28,'3'=>31,'4'=>30,'5'=>31,'6'=>30,'7'=>31,'8'=>31,'9'=>30,'10'=>31,'11'=>30,'12'=>31);  
  119. return $monthHash["$month"];  
  120. }  
  121. /**  
  122. * 獲取陰歷月份的天數  
  123. * @param year 陰歷-年  
  124. * @param month 陰歷-月,從一月開始  
  125. */  
  126. function getLunarMonthDays($year,$month){  
  127. $monthData=$this->getLunarMonths($year);  
  128. return $monthData[$month-1];  
  129. }  
  130. /**  
  131. * 獲取陰歷每月的天數的數組  
  132. * @param year  
  133. */  
  134. function getLunarMonths($year){  
  135. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  136. $leapMonth=$yearData[0];  
  137. $bit=decbin($yearData[3]);  
  138. for ($i=0;$i<strlen($bit);$i ++){  
  139. $bitArray[$i]=substr($bit,$i,1);  
  140. }  
  141. for($k=0,$klen=16-count($bitArray);$k<$klen;$k++){  
  142. array_unshift($bitArray,'0');  
  143. }  
  144. $bitArray=array_slice($bitArray,0,($leapMonth==0?12:13));  
  145. for($i=0;$i<count($bitArray);$i++){  
  146. $bitArray[$i]=$bitArray[$i] + 29;  
  147. }  
  148. return $bitArray;  
  149. }  
  150. /**  
  151. * 獲取農歷每年的天數  
  152. * @param year 農歷年份  
  153. */  
  154. function getLunarYearDays($year){  
  155. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  156. $monthArray=$this->getLunarYearMonths($year);  
  157. $len=count($monthArray);  
  158. return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);  
  159. }  
  160. function getLunarYearMonths($year){//debugger;  
  161. $monthData=$this->getLunarMonths($year);  
  162. $res=array();  
  163. $temp=0;  
  164. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  165. $len=($yearData[0]==0?12:13);  
  166. for($i=0;$i<$len;$i++){  
  167. $temp=0;  
  168. for($j=0;$j<=$i;$j++){  
  169. $temp+=$monthData[$j];  
  170. }  
  171. array_push($res,$temp);  
  172. }  
  173. return $res;  
  174. }  
  175. /**  
  176. * 獲取閏月  
  177. * @param year 陰歷年份  
  178. */  
  179. function getLeapMonth($year){  
  180. $yearData=$this->lunarInfo[$year-$this->MIN_YEAR];  
  181. return $yearData[0];  
  182. }  
  183. /**  
  184. * 計算陰歷日期與正月初一相隔的天數  
  185. * @param year  
  186. * @param month  
  187. * @param date  
  188. */  
  189. function getDaysBetweenLunar($year,$month,$date){  
  190. $yearMonth=$this->getLunarMonths($year);  
  191. $res=0;  
  192. for($i=1;$i<$month;$i++){  
  193. $res+=$yearMonth[$i-1];  
  194. }  
  195. $res+=$date-1;  
  196. return $res;  
  197. }  
  198. /**  
  199. * 計算2個陽歷日期之間的天數  
  200. * @param year 陽歷年  
  201. * @param cmonth  
  202. * @param cdate  
  203. * @param dmonth 陰歷正月對應的陽歷月份  
  204. * @param ddate 陰歷初一對應的陽歷天數  
  205. */  
  206. function getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){  
  207. $a=mktime(0,0,0,$cmonth,$cdate,$year);  
  208. $b=mktime(0,0,0,$dmonth,$ddate,$year);  
  209. return ceil(($a-$b)/24/3600);  
  210. }  
  211. /**  
  212. * 根據距離正月初一的天數計算陰歷日期  
  213. * @param year 陽歷年  
  214. * @param between 天數  
  215. */  
  216. function getLunarByBetween($year,$between){//debugger;  
  217. $lunarArray=array();  
  218. $yearMonth=array();  
  219. $t=0;  
  220. $e=0;  
  221. $leapMonth=0;  
  222. $m='';  
  223. if($between==0){  
  224. array_push($lunarArray,$year,'正月','初一');  
  225. $t=1;  
  226. $e=1;  
  227. }else{  
  228. $year=$between>0? $year : ($year-1);  
  229. $yearMonth=$this->getLunarYearMonths($year);  
  230. $leapMonth=$this->getLeapMonth($year);  
  231. $between=$between>0?$between : ($this->getLunarYearDays($year)+$between);  
  232. for($i=0;$i<13;$i++){  
  233. if($between==$yearMonth[$i]){  
  234. $t=$i+2;  
  235. $e=1;  
  236. break;  
  237. }else if($between<$yearMonth[$i]){  
  238. $t=$i+1;  
  239. $e=$between-(empty($yearMonth[$i-1])?0:$yearMonth[$i-1])+1;  
  240. break;  
  241. }  
  242. }  
  243. $m=($leapMonth!=0&&$t==$leapMonth+1)?('閏'.$this->getCapitalNum($t- 1,true)):$this->getCapitalNum(($leapMonth!=0&&$leapMonth+1<$t?($t-1):$t),true);  
  244. array_push($lunarArray,$year,$m,$this->getCapitalNum($e,false));  
  245. }  
  246. array_push($lunarArray,$this->getLunarYearName($year));// 天干地支  
  247. array_push($lunarArray,$t,$e);  
  248. array_push($lunarArray,$this->getYearZodiac($year));// 12生肖  
  249. array_push($lunarArray,$leapMonth);// 閏幾月  
  250. return $lunarArray;  
  251. }  
  252. /**  
  253. * 獲取數字的陰歷叫法  
  254. * @param num 數字  
  255. * @param isMonth 是否是月份的數字  
  256. */  
  257. function getCapitalNum($num,$isMonth){  
  258. $isMonth=$isMonth||false;  
  259. $dateHash=array('0'=>'','1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'七','8'=>'八','9'=>'九','10'=>'十 ');  
  260. $monthHash=array('0'=>'','1'=>'正月','2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'冬月','12'=>'臘月');  
  261. $res='';  
  262. if($isMonth){  
  263. $res=$monthHash[$num];  
  264. }else{  
  265. if($num<=10){  
  266. $res='初'.$dateHash[$num];  
  267. }else if($num>10&&$num<20){  
  268. $res='十'.$dateHash[$num-10];  
  269. }else if($num==20){  
  270. $res="二十";  
  271. }else if($num>20&&$num<30){  
  272. $res="廿".$dateHash[$num-20];  
  273. }else if($num==30){  
  274. $res="三十";  
  275. }  
  276. }  
  277. return $res;  
  278. }  

使用方法如下:

 

 
  1. <?php  
  2. header("Content-Type:text/html;charset=utf-8");  
  3. $lunar=new Lunar(); 
  4. $month=$lunar->convertSolarToLunar(2013,07,08);//將陽歷轉換為陰歷  
  5. echo '<pre>';  
  6. print_r($month); 

打印結果如下:

Array

(

[0] => 2013

[1] => 五月

[2] => 三十

[3] => 癸巳

[4] => 5

[5] => 30

[6] => 蛇

[7] => 0

)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品久久久| 亚洲第一视频在线观看| 亚洲夜晚福利在线观看| 乱亲女秽乱长久久久| 精品美女久久久久久免费| 久久综合久久美利坚合众国| 国产91成人video| 亚洲最大福利网站| 欧美性猛交xxxx乱大交蜜桃| 国产一区在线播放| 中文字幕精品在线| 国产伊人精品在线| 91国在线精品国内播放| 成人性教育视频在线观看| 欧美午夜影院在线视频| 亚洲日本aⅴ片在线观看香蕉| 岛国视频午夜一区免费在线观看| 久久久久在线观看| 深夜福利一区二区| 欧美成年人视频| 91沈先生在线观看| 欧美激情第6页| 日韩成人av一区| 国产这里只有精品| 精品久久久久久亚洲国产300| 亚洲视频免费一区| 久久精品亚洲一区| 粉嫩老牛aⅴ一区二区三区| 国产精品欧美亚洲777777| 日韩精品在线观看一区| 亚洲性生活视频在线观看| 亚洲综合视频1区| 亚洲美女av在线| 欧美成人剧情片在线观看| 亚洲第一页中文字幕| 国产99在线|中文| 97人人模人人爽人人喊中文字| 国产精品爽黄69| 久久久久亚洲精品| 日韩成人中文电影| 成人精品aaaa网站| 久久久久久网址| 欧美性xxxxxxxxx| 午夜精品久久久久久99热| 亚洲欧美日韩第一区| 国产成人极品视频| 日韩免费视频在线观看| 国产精品免费网站| 欧美二区在线播放| 亚洲加勒比久久88色综合| 久久久电影免费观看完整版| 色av吧综合网| 国产成人精品久久二区二区91| 日韩av综合网站| 日韩国产激情在线| 久久精品中文字幕一区| 久久精品国产99国产精品澳门| 精品久久久久久久久国产字幕| 97精品国产97久久久久久| 午夜精品视频在线| 国产精品成久久久久三级| 精品国产91久久久| 亚洲国产精彩中文乱码av在线播放| 久久国产精品久久国产精品| 精品女同一区二区三区在线播放| 欧美成人精品h版在线观看| 日韩免费观看在线观看| 97婷婷大伊香蕉精品视频| 亚洲日本中文字幕| 亚洲欧洲日韩国产| 亚洲电影免费观看高清完整版在线观看| 欧美性videos高清精品| 日韩av综合网站| 91丨九色丨国产在线| 国产精品91久久| 欧美日韩国产中文字幕| 久久色精品视频| 久久精品99无色码中文字幕| 久久久av免费| 欧美日韩亚洲天堂| 久久久免费电影| 亚洲伦理中文字幕| 亚洲a级在线观看| 国产成人亚洲综合91| 亚洲免费视频观看| 久久久噜噜噜久久久| 久久久国产在线视频| 欧美理论电影网| 狠狠躁夜夜躁人人爽天天天天97| 久久精品99国产精品酒店日本| 国产69久久精品成人看| 亚洲精品中文字幕有码专区| 日本欧美国产在线| 欧美午夜丰满在线18影院| 精品国产精品三级精品av网址| 亚洲综合精品一区二区| 欧美激情视频一区二区三区不卡| 不用播放器成人网| 国产精品日本精品| 欧美激情小视频| 国模极品一区二区三区| 久久久久久久成人| 色无极影院亚洲| 欧美极品少妇xxxxⅹ喷水| 亚洲国产精品资源| 中文字幕亚洲一区二区三区五十路| 日韩欧美成人精品| 国产精品99免视看9| 欧美黄网免费在线观看| 91av在线看| 国产欧美日韩精品丝袜高跟鞋| 7m第一福利500精品视频| 久久成人精品一区二区三区| 亚洲图片在区色| 欧美大成色www永久网站婷| 一本一本久久a久久精品综合小说| 日韩免费在线免费观看| 亚洲欧美日韩一区二区三区在线| 亚洲欧美国产va在线影院| 国产精品va在线播放| 国产精品嫩草影院久久久| 亚洲欧美日韩中文视频| 亚洲欧美国产精品久久久久久久| 日韩成人黄色av| 欧美亚洲日本黄色| 欧美黄色片免费观看| 久久免费视频网站| 日韩av中文字幕在线免费观看| 欧美午夜精品在线| 久久99国产精品久久久久久久久| 欧美日韩中国免费专区在线看| 亚洲成人xxx| 成人黄色av免费在线观看| 国语自产偷拍精品视频偷| 91久久精品久久国产性色也91| 欧美性一区二区三区| 亚洲国产欧美日韩精品| 亚洲第一福利网站| 国产成人精品久久二区二区| 欧美美最猛性xxxxxx| 麻豆国产va免费精品高清在线| 亚洲精品在线看| 久久色在线播放| 亚洲国产精品va在线观看黑人| 欧美性理论片在线观看片免费| 精品日本美女福利在线观看| 亚洲欧美自拍一区| 懂色av一区二区三区| 久久精品99无色码中文字幕| 欧美乱大交xxxxx| 久久激情视频免费观看| 国产精品久久久久福利| 国产精品一区二区性色av| 丁香五六月婷婷久久激情| 亚洲一区二区三区视频播放| 欧美激情xxxx| 日韩欧美国产高清91| 国产一区二区三区视频免费| 91系列在线观看| 91精品国产色综合| 日韩欧美在线第一页| 欧美日韩国产中字| 国产精品一区二区久久国产| 欧美另类高清videos|