您现在的位置: 365建站网 > 365文章 > PHP 实现公历日期与农历日期的相互转换函数

PHP 实现公历日期与农历日期的相互转换函数

文章来源:365jz.com     点击数:500    更新时间:2018-01-31 16:10   参与评论

PHP 实现公历日期与农历日期的相互转换函数

 

 今天根据客户的需求对时间进行了转换,就是客户要求增加农历日期的显示,在网上抄袭了一段,稍微修改了一下运行成功了,不难的,改动的很少的.

示例代码:

</>code

  1. <?php
  2. /*
  3. * 365建站网
  4. * www.365jz.com 新二级页面 农历转换成公历
  5. *
  6. * */
  7. // lunar.php 新建这个php文件,所有的代码无需改,需要改的是下面teacher.php 的几行
  8. class Lunar
  9. {
  10. private $_SMDay = array(1 => 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);//定义公历月分天数
  11. private $_LStart = 1950 ;//农历从1950年开始
  12. private $_LMDay = array(
  13. //差:该年的农历正月初一到该年公历1月1日的天数;1~12:农历月份天数;闰:如有闰月,记录该月平月天数
  14. // 差 1 2 3 4 5 6 7 8 9 10 11 12 闰
  15. array(47,29,30,30,29,30,30,29,29,30,29,30,29),
  16. array(36,30,29,30,30,29,30,29,30,29,30,29,30),
  17. array(6,29,30,29,30,59,29,30,30,29,30,29,30,29), //五月29 闰五月30
  18. array(44,29,30,29,29,30,30,29,30,30,29,30,29),
  19. array(33,30,29,30,29,29,30,29,30,30,29,30,30),
  20. array(23,29,30,59,29,29,30,29,30,29,30,30,30,29), //三月29 闰三月30
  21. array(42,29,30,29,30,29,29,30,29,30,29,30,30),
  22. array(30,30,29,30,29,30,29,29,59,30,29,30,29,30), //八月30 闰八月29
  23. array(48,30,30,30,29,30,29,29,30,29,30,29,30),
  24. array(38,29,30,30,29,30,29,30,29,30,29,30,29),
  25. array(27,30,29,30,29,30,59,30,29,30,29,30,29,30), //六月30 闰六月29
  26. array(45,30,29,30,29,30,29,30,30,29,30,29,30),
  27. array(35,29,30,29,29,30,29,30,30,29,30,30,29),
  28. array(24,30,29,30,58,30,29,30,29,30,30,30,29,29), //四月29 闰四月29
  29. array(43,30,29,30,29,29,30,29,30,29,30,30,30),
  30. array(32,29,30,29,30,29,29,30,29,29,30,30,29),
  31. array(20,30,30,59,30,29,29,30,29,29,30,30,29,30), //三月30 闰三月29
  32. array(39,30,30,29,30,30,29,29,30,29,30,29,30),
  33. array(29,29,30,29,30,30,29,59,30,29,30,29,30,30), //七月30 闰七月29
  34. array(47,29,30,29,30,29,30,30,29,30,29,30,29),
  35. array(36,30,29,29,30,29,30,30,29,30,30,29,30),
  36. array(26,29,30,29,29,59,30,29,30,30,30,29,30,30), //五月30 闰五月29
  37. array(45,29,30,29,29,30,29,30,29,30,30,29,30),
  38. array(33,30,29,30,29,29,30,29,29,30,30,29,30),
  39. array(22,30,30,29,59,29,30,29,29,30,30,29,30,30), //四月30 闰四月29
  40. array(41,30,30,29,30,29,29,30,29,29,30,29,30),
  41. array(30,30,30,29,30,29,30,29,59,29,30,29,30,30), //八月30 闰八月29
  42. array(48,30,29,30,30,29,30,29,30,29,30,29,29),
  43. array(37,30,29,30,30,29,30,30,29,30,29,30,29),
  44. array(27,30,29,29,30,29,60,29,30,30,29,30,29,30), //六月30 闰六月30
  45. array(46,30,29,29,30,29,30,29,30,30,29,30,30),
  46. array(35,29,30,29,29,30,29,29,30,30,29,30,30),
  47. array(24,30,29,30,58,30,29,29,30,29,30,30,30,29), //四月29 闰四月29
  48. array(43,30,29,30,29,29,30,29,29,30,29,30,30),
  49. array(32,30,29,30,30,29,29,30,29,29,59,30,30,30), //十月30 闰十月29
  50. array(50,29,30,30,29,30,29,30,29,29,30,29,30),
  51. array(39,29,30,30,29,30,30,29,30,29,30,29,29),
  52. array(28,30,29,30,29,30,59,30,30,29,30,29,29,30), //六月30 闰六月29
  53. array(47,30,29,30,29,30,29,30,30,29,30,30,29),
  54. array(36,30,29,29,30,29,30,29,30,29,30,30,30),
  55. array(26,29,30,29,29,59,29,30,29,30,30,30,30,30), //五月30 闰五月29
  56. array(45,29,30,29,29,30,29,29,30,29,30,30,30),
  57. array(34,29,30,30,29,29,30,29,29,30,29,30,30),
  58. array(22,29,30,59,30,29,30,29,29,30,29,30,29,30), //三月30 闰三月29
  59. array(40,30,30,30,29,30,29,30,29,29,30,29,30),
  60. array(30,29,30,30,29,30,29,30,59,29,30,29,30,30), //八月30 闰八月29
  61. array(49,29,30,29,30,30,29,30,29,30,30,29,29),
  62. array(37,30,29,30,29,30,29,30,30,29,30,30,29),
  63. array(27,30,29,29,30,58,30,30,29,30,30,29,30,29), //五月29 闰五月29
  64. array(46,30,29,29,30,29,29,30,29,30,30,30,29),
  65. array(35,30,30,29,29,30,29,29,30,29,30,30,29),
  66. array(23,30,30,29,59,30,29,29,30,29,30,29,30,30), //四月30 闰四月29
  67. array(42,30,30,29,30,29,30,29,29,30,29,30,29),
  68. array(31,30,30,29,30,30,29,30,29,29,30,29,30),
  69. array(21,29,59,30,30,29,30,29,30,29,30,29,30,30), //二月30 闰二月29
  70. array(39,29,30,29,30,29,30,30,29,30,29,30,29),
  71. array(28,30,29,30,29,30,29,59,30,30,29,30,30,30), //七月30 闰七月29
  72. array(48,29,29,30,29,29,30,29,30,30,30,29,30),
  73. array(37,30,29,29,30,29,29,30,29,30,30,29,30),
  74. array(25,30,30,29,29,59,29,30,29,30,29,30,30,30), //五月30 闰五月29
  75. array(44,30,29,30,29,30,29,29,30,29,30,29,30),
  76. array(33,30,29,30,30,29,30,29,29,30,29,30,29),
  77. array(22,30,29,30,59,30,29,30,29,30,29,30,29,30), //四月30 闰四月29
  78. array(40,30,29,30,29,30,30,29,30,29,30,29,30),
  79. array(30,29,30,29,30,29,30,29,30,59,30,29,30,30), //九月30 闰九月29
  80. array(49,29,30,29,29,30,29,30,30,30,29,30,29),
  81. array(38,30,29,30,29,29,30,29,30,30,29,30,30),
  82. array(27,29,30,29,30,29,59,29,30,29,30,30,30,29), //六月29 闰六月30
  83. array(46,29,30,29,30,29,29,30,29,30,29,30,30),
  84. array(35,30,29,30,29,30,29,29,30,29,29,30,30),
  85. array(24,29,30,30,59,30,29,29,30,29,30,29,30,30), //四月30 闰四月29
  86. array(42,29,30,30,29,30,29,30,29,30,29,30,29),
  87. array(31,30,29,30,29,30,30,29,30,29,30,29,30),
  88. array(21,29,59,29,30,30,29,30,30,29,30,29,30,30), //二月30 闰二月29
  89. array(40,29,30,29,29,30,29,30,30,29,30,30,29),
  90. array(28,30,29,30,29,29,59,30,29,30,30,30,29,30), //六月30 闰六月29
  91. array(47,30,29,30,29,29,30,29,29,30,30,30,29),
  92. array(36,30,30,29,30,29,29,30,29,29,30,30,29),
  93. array(25,30,30,30,29,59,29,30,29,29,30,30,29,30), //五月30 闰五月29
  94. array(43,30,30,29,30,29,30,29,30,29,29,30,30),
  95. array(33,29,30,29,30,30,29,30,29,30,29,30,29),
  96. array(22,29,30,59,30,29,30,30,29,30,29,30,29,30), //三月30 闰三月29
  97. array(41,30,29,29,30,29,30,30,29,30,30,29,30),
  98. array(30,29,30,29,29,30,29,30,29,30,30,59,30,30), //十一月30 闰十一月29
  99. array(49,29,30,29,29,30,29,30,29,30,30,29,30),
  100. array(38,30,29,30,29,29,30,29,29,30,30,29,30),
  101. array(27,30,30,29,30,29,59,29,29,30,29,30,30,29), //六月29 闰六月30
  102. array(45,30,30,29,30,29,29,30,29,29,30,29,30),
  103. array(34,30,30,29,30,29,30,29,30,29,29,30,29),
  104. array(23,30,30,29,30,59,30,29,30,29,30,29,29,30), //五月30 闰五月29
  105. array(42,30,29,30,30,29,30,29,30,30,29,30,29),
  106. array(31,29,30,29,30,29,30,30,29,30,30,29,30),
  107. array(21,29,59,29,30,29,30,29,30,30,29,30,30,30), //二月30 闰二月29
  108. array(40,29,30,29,29,30,29,29,30,30,29,30,30),
  109. array(29,30,29,30,29,29,30,58,30,29,30,30,30,29), //七月29 闰七月29
  110. array(47,30,29,30,29,29,30,29,29,30,29,30,30),
  111. array(36,30,29,30,29,30,29,30,29,29,30,29,30),
  112. array(25,30,29,30,30,59,29,30,29,29,30,29,30,29), //五月29 闰五月30
  113. array(44,29,30,30,29,30,30,29,30,29,29,30,29),
  114. array(32,30,29,30,29,30,30,29,30,30,29,30,29),
  115. array(22,29,30,59,29,30,29,30,30,29,30,30,29,29), //三月29 闰三月30
  116. );
  117. //是否闰年
  118. private function IsLeapYear($AYear)
  119. {
  120. return ($AYear % 4 == 0) && (($AYear % 100 != 0) || ($AYear % 400 == 0));
  121. }
  122. //公历该月的天数(year:年份; month:月份)
  123. private function GetSMon($year,$month)
  124. {
  125. if($this->IsLeapYear($year) && $month == 2)
  126. return 29;
  127. else
  128. return $this->_SMDay[$month];
  129. }
  130. //农历名称转换
  131. private function LYearName($year)
  132. {
  133. $Name = array("零","一","二","三","四","五","六","七","八","九");
  134. for($i=0;$i<4;$i++)
  135. for($k=0;$k<10;$k++)
  136. if($year[$i]==$k)
  137. $tmp.=$Name[$k];
  138. return $tmp;
  139. }
  140. private function LMonName($month)
  141. {
  142. if($month >=1 && $month <=12 )
  143. {
  144. $Name = array( 1=>"正","二","三","四","五","六","七","八","九","十","十一","十二");
  145. return $Name[$month];
  146. }
  147. return $month;
  148. }
  149. private function LDayName($day)
  150. {
  151. if($day >=1 && $day <=30 )
  152. {
  153. $Name = array( 1 =>
  154. "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
  155. "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
  156. "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"
  157. );
  158. return $Name[$day];
  159. }
  160. return $day;
  161. }
  162. //公历转农历(Sdate:公历日期)
  163. public function S2L($date)
  164. {
  165. list($year, $month, $day) = explode("-", $date);
  166. if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;
  167. //获取查询日期到当年1月1日的天数
  168. $date1 = strtotime($year."-01-01");//当年1月1日
  169. $date2 = strtotime($year."-".$month."-".$day);
  170. $days=round(($date2-$date1)/3600/24);
  171. $days += 1;
  172. //获取相应年度农历数据,化成数组Larray
  173. $Larray = $this->_LMDay[$year - $this->_LStart];
  174. if($days <= $Larray[0])
  175. {
  176. $Lyear = $year - 1;
  177. $days = $Larray[0] - $days;
  178. $Larray = $this->_LMDay[$Lyear - $this->_LStart];
  179. if($days < $Larray[12])
  180. {
  181. $Lmonth = 12;
  182. $Lday = $Larray[12] - $days;
  183. }
  184. else
  185. {
  186. $Lmonth = 11;
  187. $days = $days - $Larray[12];
  188. $Lday = $Larray[11] - $days;
  189. }
  190. }
  191. else
  192. {
  193. $Lyear = $year;
  194. $days = $days - $Larray[0];
  195. for($i = 1;$i <= 12;$i++)
  196. {
  197. if($days > $Larray[$i]) $days = $days - $Larray[$i];
  198. else
  199. {
  200. if ($days > 30){
  201. $days = $days - $Larray[13];
  202. $Ltype = 1;
  203. }
  204. $Lmonth = $i;
  205. $Lday = $days;
  206. break;
  207. }
  208. }
  209. }
  210. return mktime(0, 0, 0, $Lmonth, $Lday, $Lyear);
  211. //$Ldate = $Lyear."-".$Lmonth."-".$Lday;
  212. //$Ldate = $this->LYearName($Lyear)."年".$this->LMonName($Lmonth)."月".$this->LDayName($Lday);
  213. //if($Ltype) $Ldate.="(闰)";
  214. //return $Ldate;
  215. }
  216. //农历转公历(date:农历日期; type:是否闰月)
  217. public function L2S($date,$type = 0)
  218. {
  219. list($year, $month, $day) = split("-",$date);
  220. if($year <= 1951 || $month <= 0 || $day <= 0 || $year >= 2051 ) return false;
  221. $Larray = $this->_LMDay[$year - $this->_LStart];
  222. if($type == 1 && count($Larray)<=12 ) return false;//要求查询闰,但查无闰月
  223. //如果查询的农历是闰月并该年度农历数组存在闰月数据就获取
  224. if($Larray[$month]>30 && $type == 1 && count($Larray) >=13) $day = $Larray[13] + $day;
  225. //获取该年农历日期到公历1月1日的天数
  226. $days = $day;
  227. for($i=0;$i<=$month-1;$i++)
  228. $days += $Larray[$i];
  229. //当查询农历日期距离公历1月1日超过一年时
  230. if($days > 366 || ($this->GetSMon($month,2)!=29 && $days>365 ))
  231. {
  232. $Syear = $year +1;
  233. if($this->GetSMon($month,2)!=29)
  234. $days-=366;
  235. else
  236. $days-=365;
  237. if($days > $this->_SMDay[1])
  238. {
  239. $Smonth = 2;
  240. $Sday = $days - $this->_SMDay[1];
  241. }
  242. else
  243. {
  244. $Smonth = 1;
  245. $Sday = $days;
  246. }
  247. }
  248. else
  249. {
  250. $Syear =$year;
  251. for($i=1;$i<=12;$i++)
  252. {
  253. if($days > $this->GetSMon($Syear,$i))
  254. $days-=$this->GetSMon($Syear,$i);
  255. else
  256. {
  257. $Smonth = $i;
  258. $Sday = $days;
  259. break;
  260. }
  261. }
  262. }
  263. return mktime(0, 0, 0, $Smonth, $Sday, $Syear);
  264. //$Sdate = $Syear."-".$Smonth."-".$Sday;
  265. //return $Sdate;
  266. }
  267. }
  268. ?>

  teacher.php

</>code

  1. //公历转农历
  2. require_once(CORE_."Lunar.php"); // 加载lunar.php文件
  3. $today = date("Y-m-d");
  4. $lunar = new Lunar(); // 实例化类
  5. $nonglitime = array();
  6. $nl = date("Y-n-d",$lunar->S2L($today));
  7. echo $nl;exit; // 转为农历是:2012-05-25

 

</>code

  1. 方法二代码:php农历日历
  2. <?
  3.   /*
  4.    *说实在的,我对古历可以说一窍不通,下面这个数组还是不理解 可是作者的信箱好像不通
  5.    *基本上是依样画葫芦,所以出现错误,见笑见笑,呵呵
  6.    */
  7.   #农历每月的天数
  8.   $everymonth=array(
  9.                     0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),
  10.                     1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),
  11.                     2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),
  12.                     3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),
  13.                     4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),
  14.                     5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),
  15.                     6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),
  16.                     7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),
  17.                     8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),
  18.                     9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),
  19.                     10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),
  20.                     11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),
  21.                     12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),
  22.                     13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),
  23.                     14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),
  24.                     15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),
  25.                     16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),
  26.                     17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),
  27.                     18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),
  28.                     19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),
  29.                     20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),
  30.                     21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),
  31.                     22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),
  32.                     23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),
  33.                     24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),
  34.                     25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),
  35.                     26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),
  36.                     27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),
  37.                     28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),
  38.                     29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),
  39.                     30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),
  40.                     31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),
  41.                     32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),
  42.                     33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),
  43.                     34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),
  44.                     35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),
  45.                     36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),
  46.                     37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),
  47.                     38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),
  48.                     39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),
  49.                     40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),
  50.                     41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),
  51.                     42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),
  52.                     43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),
  53.                     44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),
  54.                     45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),
  55.                     46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),
  56.                     47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),
  57.                     48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),
  58.                     49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),
  59.                     50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),
  60.                     51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),
  61.                     52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),
  62.                     53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),
  63.                     54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),
  64.                     55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),
  65.                     56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),
  66.                     57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),
  67.                     58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),
  68.                     59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),
  69.                     60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),
  70.                     61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),
  71.                     62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),
  72.                     63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),
  73.                     64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),
  74.                     65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),
  75.                     66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),
  76.                     67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),
  77.                     68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),
  78.                     69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),
  79.                     70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),
  80.                     71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),
  81.                     72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),
  82.                     73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),
  83.                     74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),
  84.                     75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),
  85.                     76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),
  86.                     77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),
  87.                     78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),
  88.                     79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),
  89.                     80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),
  90.                     81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),
  91.                     82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),
  92.                     83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),
  93.                     84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),
  94.                     85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),
  95.                     86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),
  96.                     87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),
  97.                     88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),
  98.                     89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),
  99.                     90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),
  100.                     91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),
  101.                     92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),
  102.                     93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),
  103.                     94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),
  104.                     95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),
  105.                     96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),
  106.                     97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),
  107.                     98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),
  108.                     99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),
  109.                     100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),
  110.                     101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),
  111.                     102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),
  112.                     103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),
  113.                     104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),
  114.                     105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),
  115.                     106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),
  116.                     107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),
  117.                     108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),
  118.                     109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),
  119.                     110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),
  120.                     111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),
  121.                     112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),
  122.                     113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),
  123.                     114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),
  124.                     115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),
  125.                     116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),
  126.                     117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),
  127.                     118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),
  128.                     119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),
  129.                     120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)
  130.                    );
  131. ##############################
  132.   #农历天干
  133.   $mten=array("null","甲","乙","丙","丁","戊","己","庚","辛","壬","癸");
  134.   #农历地支
  135.   $mtwelve=array("null","子(鼠)","丑(牛)","寅(虎)","卯(兔)","辰(龙)",
  136.                  "巳(蛇)","午(马)","未(羊)","申(猴)","酉(鸡)","戌(狗)","亥(猪)");
  137.   #农历月份
  138.   $mmonth=array("闰","正","二","三","四","五","六",
  139.                 "七","八","九","十","十一","十二","月");
  140.   #农历日
  141.   $mday=array("null","初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
  142.               "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
  143.               "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十");
  144. ##############################
  145.   #星期
  146.   $weekday = array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
  147.   #阳历总天数 至1900年12月21日
  148.   $total=11;
  149.   #阴历总天数
  150.   $mtotal=0;
  151. ##############################
  152.   #获得当日日期
  153.   $today=getdate();
  154.   if($today["year"]<1901 || $today["year"]>2020) die("年份出错!");
  155.   $cur_wday=$today["wday"];
  156.   for($y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和
  157.        $total+=365;
  158.        if ($y%4==0) $total++;
  159.   }
  160.   switch($today["mon"]) { //再加当年的几个月
  161.          case 12:
  162.               $total+=30;
  163.          case 11:
  164.               $total+=31;
  165.          case 10:
  166.               $total+=30;
  167.          case 9:
  168.               $total+=31;
  169.          case 8:
  170.               $total+=31;
  171.          case 7:
  172.               $total+=30;
  173.          case 6:
  174.               $total+=31;
  175.          case 5:
  176.               $total+=30;
  177.          case 4:
  178.               $total+=31;
  179.          case 3:
  180.               $total+=28;
  181.          case 2:
  182.               $total+=31;
  183.   }
  184.   if($today["year"]%4 == 0 && $today["mon"]>2) $total++; //如果当年是闰年还要加一天
  185.   $total=$total+$today["mday"]-1; //加当月的天数
  186.   $flag1=0;  //判断跳出循环的条件
  187.   $j=0;
  188.   while ($j<=120){  //用农历的天数累加来判断是否超过阳历的天数
  189.       $i=1;
  190.       while ($i<=13){
  191.             $mtotal+=$everymonth[$j][$i];
  192.             if ($mtotal>=$total){
  193.                  $flag1=1;
  194.                  break;
  195.             }
  196.             $i++;
  197.       }
  198.       if ($flag1==1) break;
  199.       $j++;
  200.   }
  201.   if($everymonth[$j][0]<>0 and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补
  202.       $mm=$i-1;
  203.   }
  204.   else{
  205.       $mm=$i;
  206.   }
  207.   if($i==$everymonth[$j][0]+1 and $everymonth[$j][0]<>0) {
  208.       $nlmon=$mmonth[0].$mmonth[$mm];#闰月
  209.   }
  210.   else {
  211.       $nlmon=$mmonth[$mm].$mmonth[13];
  212.   }
  213.   #计算所求月份1号的农历日期
  214.   $md=$everymonth[$j][$i]-($mtotal-$total);
  215.   if($md > $everymonth[$j][$i])
  216.       $md-=$everymonth[$j][$i];
  217.   $nlday=$mday[$md];
  218.   $nowday=date("Y年n月j日 ").$weekday[$cur_wday]."<br>".$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]]."年".$nlmon.$nlday;
  219.   echo "<font color=#3333ff>$nowday</font>";
  220. ?>
 

 


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (500人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号