DayService.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Administrator
  5. * Date: 2020/11/25
  6. * Time: 17:42
  7. */
  8. namespace addon\scenefestival\model;
  9. use app\model\BaseModel;
  10. class DayService extends BaseModel
  11. {
  12. var $MIN_YEAR = 1891;
  13. var $MAX_YEAR = 2100;
  14. var $lunarInfo = array (
  15. 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 ),
  16. 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 ),
  17. 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 ),
  18. 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 ),
  19. 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 ),
  20. 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 ),
  21. 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 ),
  22. 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 ),
  23. 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 ),
  24. 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 ),
  25. 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 ),
  26. 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 ),
  27. 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 ),
  28. 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 ),
  29. 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 ),
  30. 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 ),
  31. 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 ),
  32. 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 ),
  33. 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 ),
  34. 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 ),
  35. 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 ),
  36. 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 ),
  37. 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 ),
  38. 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 ),
  39. 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 ),
  40. 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 ),
  41. 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 ),
  42. 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 ),
  43. 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 ),
  44. 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 ),
  45. 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 ),
  46. 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 ),
  47. 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 ),
  48. 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 ),
  49. 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 )
  50. );
  51. /**
  52. * 将阳历转换为阴历
  53. * @param year 公历-年
  54. * @param month 公历-月
  55. * @param date 公历-日
  56. */
  57. function convertSolarToLunar($year, $month, $date)
  58. {
  59. //debugger;
  60. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  61. if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) return array ( 1891, '正月', '初一', '辛卯', 1, 1, '兔' );
  62. return $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $date, $yearData[ 1 ], $yearData[ 2 ]));
  63. }
  64. function convertSolarMonthToLunar($year, $month, $date)
  65. {
  66. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  67. if ($year == $this->MIN_YEAR && $month <= 2 && $date <= 9) return array ( 1891, '正月', '初一', '辛卯', 1, 1, '兔' );
  68. $month_days_ary = array ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
  69. $dd = $month_days_ary[ $month ];
  70. if ($this->isLeapYear($year) && $month == 2) $dd++;
  71. $lunar_ary = array ();
  72. for ($i = 1; $i < $dd; $i++) {
  73. $array = $this->getLunarByBetween($year, $this->getDaysBetweenSolar($year, $month, $i, $yearData[ 1 ], $yearData[ 2 ]));
  74. $array[] = $year . '-' . $month . '-' . $i;
  75. $lunar_ary[ $i ] = $array;
  76. }
  77. return $lunar_ary;
  78. }
  79. /**
  80. * 将阴历转换为阳历
  81. * @param year 阴历-年
  82. * @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0
  83. * @param date 阴历-日
  84. */
  85. function convertLunarToSolar($year, $month, $date)
  86. {
  87. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  88. $between = $this->getDaysBetweenLunar($year, $month, $date);
  89. $res = mktime(0, 0, 0, $yearData[ 1 ], $yearData[ 2 ], $year);
  90. $res = date('Y-m-d', $res + $between * 24 * 60 * 60);
  91. $day = explode('-', $res);
  92. $year = $day[ 0 ];
  93. $month = $day[ 1 ];
  94. $day = $day[ 2 ];
  95. return array ( $year, $month, $day );
  96. }
  97. /**
  98. * 判断是否是闰年
  99. * @param year
  100. */
  101. function isLeapYear($year)
  102. {
  103. return ( ( $year % 4 == 0 && $year % 100 != 0 ) || ( $year % 400 == 0 ) );
  104. }
  105. /**
  106. * 获取干支纪年
  107. * @param year
  108. */
  109. function getLunarYearName($year)
  110. {
  111. $sky = array ( '庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己' );
  112. $earth = array ( '申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未' );
  113. $year = $year . '';
  114. return $sky[ $year{3} ] . $earth[ $year % 12 ];
  115. }
  116. /**
  117. * 根据阴历年获取生肖
  118. * @param year 阴历年
  119. */
  120. function getYearZodiac($year)
  121. {
  122. $zodiac = array ( '猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊' );
  123. return $zodiac[ $year % 12 ];
  124. }
  125. /**
  126. * 获取阳历月份的天数
  127. * @param year 阳历-年
  128. * @param month 阳历-月
  129. */
  130. function getSolarMonthDays($year, $month)
  131. {
  132. $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 );
  133. return $monthHash[ "$month" ];
  134. }
  135. /**
  136. * 获取阴历月份的天数
  137. * @param year 阴历-年
  138. * @param month 阴历-月,从一月开始
  139. */
  140. function getLunarMonthDays($year, $month)
  141. {
  142. $monthData = $this->getLunarMonths($year);
  143. return $monthData[ $month - 1 ];
  144. }
  145. /**
  146. * 获取阴历每月的天数的数组
  147. * @param year
  148. */
  149. function getLunarMonths($year)
  150. {
  151. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  152. $leapMonth = $yearData[ 0 ];
  153. $bit = decbin($yearData[ 3 ]);
  154. for ($i = 0; $i < strlen($bit); $i++) $bitArray[ $i ] = substr($bit, $i, 1);
  155. for ($k = 0, $klen = 16 - count($bitArray); $k < $klen; $k++) array_unshift($bitArray, '0');
  156. $bitArray = array_slice($bitArray, 0, ( $leapMonth == 0 ? 12 : 13 ));
  157. for ($i = 0; $i < count($bitArray); $i++) $bitArray[ $i ] = $bitArray[ $i ] + 29;
  158. return $bitArray;
  159. }
  160. /**
  161. * 获取农历每年的天数
  162. * @param year 农历年份
  163. */
  164. function getLunarYearDays($year)
  165. {
  166. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  167. $monthArray = $this->getLunarYearMonths($year);
  168. $len = count($monthArray);
  169. return ( $monthArray[ $len - 1 ] == 0 ? $monthArray[ $len - 2 ] : $monthArray[ $len - 1 ] );
  170. }
  171. function getLunarYearMonths($year)
  172. {
  173. //debugger;
  174. $monthData = $this->getLunarMonths($year);
  175. $res = array ();
  176. $temp = 0;
  177. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  178. $len = ( $yearData[ 0 ] == 0 ? 12 : 13 );
  179. for ($i = 0; $i < $len; $i++) {
  180. $temp = 0;
  181. for ($j = 0; $j <= $i; $j++) $temp += $monthData[ $j ];
  182. array_push($res, $temp);
  183. }
  184. return $res;
  185. }
  186. /**
  187. * 获取闰月
  188. * @param year 阴历年份
  189. */
  190. function getLeapMonth($year)
  191. {
  192. $yearData = $this->lunarInfo[ $year - $this->MIN_YEAR ];
  193. return $yearData[ 0 ];
  194. }
  195. /**
  196. * 计算阴历日期与正月初一相隔的天数
  197. * @param year
  198. * @param month
  199. * @param date
  200. */
  201. function getDaysBetweenLunar($year, $month, $date)
  202. {
  203. $yearMonth = $this->getLunarMonths($year);
  204. $res = 0;
  205. for ($i = 1; $i < $month; $i++) $res += $yearMonth[ $i - 1 ];
  206. $res += $date - 1;
  207. return $res;
  208. }
  209. /**
  210. * 计算2个阳历日期之间的天数
  211. * @param year 阳历年
  212. * @param cmonth
  213. * @param cdate
  214. * @param dmonth 阴历正月对应的阳历月份
  215. * @param ddate 阴历初一对应的阳历天数
  216. */
  217. function getDaysBetweenSolar($year, $cmonth, $cdate, $dmonth, $ddate)
  218. {
  219. $a = mktime(0, 0, 0, $cmonth, $cdate, $year);
  220. $b = mktime(0, 0, 0, $dmonth, $ddate, $year);
  221. return ceil(( $a - $b ) / 24 / 3600);
  222. }
  223. /**
  224. * 根据距离正月初一的天数计算阴历日期
  225. * @param year 阳历年
  226. * @param between 天数
  227. */
  228. function getLunarByBetween($year, $between)
  229. {
  230. //debugger;
  231. $lunarArray = array ();
  232. $yearMonth = array ();
  233. $t = 0;
  234. $e = 0;
  235. $leapMonth = 0;
  236. $m = '';
  237. if ($between == 0) {
  238. array_push($lunarArray, $year, '01', '01');
  239. $t = 1;
  240. $e = 1;
  241. } else {
  242. $year = $between > 0 ? $year : ( $year - 1 );
  243. $yearMonth = $this->getLunarYearMonths($year);
  244. $leapMonth = $this->getLeapMonth($year);
  245. $between = $between > 0 ? $between : ( $this->getLunarYearDays($year) + $between );
  246. for ($i = 0; $i < 13; $i++) {
  247. if ($between == $yearMonth[ $i ]) {
  248. $t = $i + 2;
  249. $e = 1;
  250. break;
  251. } else if ($between < $yearMonth[ $i ]) {
  252. $t = $i + 1;
  253. $e = $between - ( empty($yearMonth[ $i - 1 ]) ? 0 : $yearMonth[ $i - 1 ] ) + 1;
  254. break;
  255. }
  256. }
  257. $m = ( $leapMonth != 0 && $t == $leapMonth + 1 ) ? ( '闰' . $this->getCapitalNum($t - 1, true) ) : $this->getCapitalNum(( $leapMonth != 0 && $leapMonth + 1 < $t ? ( $t - 1 ) : $t ), true);
  258. array_push($lunarArray, $year, $m, $this->getCapitalNum($e, false));
  259. }
  260. array_push($lunarArray, $this->getLunarYearName($year));// 天干地支
  261. array_push($lunarArray, $t, $e);
  262. array_push($lunarArray, $this->getYearZodiac($year));// 12生肖
  263. array_push($lunarArray, $leapMonth);// 闰几月
  264. return $lunarArray;
  265. }
  266. /**
  267. * 获取数字的阴历叫法
  268. * @param num 数字
  269. * @param isMonth 是否是月份的数字
  270. */
  271. function getCapitalNum($num, $isMonth)
  272. {
  273. $isMonth = $isMonth || false;
  274. $dateHash = array ( '0' => '', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10' );
  275. $monthHash = array ( '0' => '', '1' => '01', '2' => '02', '3' => '03', '4' => '04', '5' => '05', '6' => '06', '7' => '07', '8' => '08', '9' => '09', '10' => '10', '11' => '11', '12' => '12' );
  276. $res = '';
  277. if ($isMonth) $res = $monthHash[ $num ];
  278. else {
  279. if ($num <= 10) $res = '0' . $dateHash[ $num ];
  280. else if ($num > 10 && $num < 20) $res = '1' . $dateHash[ $num - 10 ];
  281. else if ($num == 20) $res = "20";
  282. else if ($num > 20 && $num < 30) $res = "2" . $dateHash[ $num - 20 ];
  283. else if ($num == 30) $res = "30";
  284. }
  285. return $res;
  286. }
  287. /*
  288. * 节气通用算法
  289. */
  290. function getJieQi($_year, $month, $day)
  291. {
  292. $year = substr($_year, -2) + 0;
  293. $coefficient = array (
  294. array ( 5.4055, 2019, -1 ),//小寒
  295. array ( 20.12, 2082, 1 ),//大寒
  296. array ( 3.87 ),//立春
  297. array ( 18.74, 2026, -1 ),//雨水
  298. array ( 5.63 ),//惊蛰
  299. array ( 20.646, 2084, 1 ),//春分
  300. array ( 4.81 ),//清明
  301. array ( 20.1 ),//谷雨
  302. array ( 5.52, 1911, 1 ),//立夏
  303. array ( 21.04, 2008, 1 ),//小满
  304. array ( 5.678, 1902, 1 ),//芒种
  305. array ( 21.37, 1928, 1 ),//夏至
  306. array ( 7.108, 2016, 1 ),//小暑
  307. array ( 22.83, 1922, 1 ),//大暑
  308. array ( 7.5, 2002, 1 ),//立秋
  309. array ( 23.13 ),//处暑
  310. array ( 7.646, 1927, 1 ),//白露
  311. array ( 23.042, 1942, 1 ),//秋分
  312. array ( 8.318 ),//寒露
  313. array ( 23.438, 2089, 1 ),//霜降
  314. array ( 7.438, 2089, 1 ),//立冬
  315. array ( 22.36, 1978, 1 ),//小雪
  316. array ( 7.18, 1954, 1 ),//大雪
  317. array ( 21.94, 2021, -1 )//冬至
  318. );
  319. $term_name = array (
  320. "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨",
  321. "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑",
  322. "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" );
  323. $idx1 = ( $month - 1 ) * 2;
  324. $_leap_value = floor(( $year - 1 ) / 4);
  325. $day1 = floor($year * 0.2422 + $coefficient[ $idx1 ][ 0 ]) - $_leap_value;
  326. if (isset($coefficient[ $idx1 ][ 1 ]) && $coefficient[ $idx1 ][ 1 ] == $_year) $day1 += $coefficient[ $idx1 ][ 2 ];
  327. $day2 = floor($year * 0.2422 + $coefficient[ $idx1 + 1 ][ 0 ]) - $_leap_value;
  328. if (isset($coefficient[ $idx1 + 1 ][ 1 ]) && $coefficient[ $idx1 + 1 ][ 1 ] == $_year) $day1 += $coefficient[ $idx1 + 1 ][ 2 ];
  329. //echo __FILE__.'->'.__LINE__.' $day1='.$day1,',$day2='.$day2.'<br/>'.chr(10);
  330. $data = array ();
  331. if ($day < $day1) {
  332. $data[ 'name1' ] = $term_name[ $idx1 - 1 ];
  333. $data[ 'name2' ] = $term_name[ $idx1 - 1 ] . '后';
  334. } else if ($day == $day1) {
  335. $data[ 'name1' ] = $term_name[ $idx1 ];
  336. $data[ 'name2' ] = $term_name[ $idx1 ];
  337. } else if ($day > $day1 && $day < $day2) {
  338. $data[ 'name1' ] = $term_name[ $idx1 ];
  339. $data[ 'name2' ] = $term_name[ $idx1 ] . '后';
  340. } else if ($day == $day2) {
  341. $data[ 'name1' ] = $term_name[ $idx1 + 1 ];
  342. $data[ 'name2' ] = $term_name[ $idx1 + 1 ];
  343. } else if ($day > $day2) {
  344. $data[ 'name1' ] = $term_name[ $idx1 + 1 ];
  345. $data[ 'name2' ] = $term_name[ $idx1 + 1 ] . '后';
  346. }
  347. return $data;
  348. }
  349. /*
  350. * 获取节日:特殊的节日只能修改此函数来计算
  351. */
  352. function getFestival($today, $nl_info = false, $config = 1)
  353. {
  354. if ($config == 1) {
  355. $arr_lunar = array ( '01-01' => '春节', '01-15' => '元宵节', '02-02' => '二月二', '05-05' => '端午节', '07-07' => '七夕节', '08-15' => '中秋节', '09-09' => '重阳节', '12-08' => '腊八节', '12-23' => '小年' );
  356. $arr_solar = array ( '01-01' => '元旦', '02-14' => '情人节', '03-12' => '植树节', '04-01' => '愚人节', '05-01' => '劳动节', '06-01' => '儿童节', '10-01' => '国庆节', '10-31' => '万圣节', '12-24' => '平安夜', '12-25' => '圣诞节' );
  357. }//需要不同节日的,用不同的$config,然后配置$arr_lunar和$arr_solar
  358. $festivals = array ();
  359. list($y, $m, $d) = explode('-', $today);
  360. if (!$nl_info) $nl_info = $this->convertSolarToLunar($y, intval($m), intval($d));
  361. if ($nl_info[ 7 ] > 0 && $nl_info[ 7 ] < $nl_info[ 4 ]) $nl_info[ 4 ] -= 1;
  362. $md_lunar = substr('0' . $nl_info[ 4 ], -2) . '-' . substr('0' . $nl_info[ 5 ], -2);
  363. $md_solar = substr_replace($today, '', 0, 5);
  364. isset($arr_lunar[ $md_lunar ]) ? array_push($festivals, $arr_lunar[ $md_lunar ]) : '';
  365. isset($arr_solar[ $md_solar ]) ? array_push($festivals, $arr_solar[ $md_solar ]) : '';
  366. $glweek = date("w", strtotime($today)); //0-6
  367. if ($m == 5 && ( $d > 7 ) && ( $d < 15 ) && ( $glweek == 0 )) array_push($festivals, "母亲节");
  368. if ($m == 6 && ( $d > 14 ) && ( $d < 22 ) && ( $glweek == 0 )) array_push($festivals, "父亲节");
  369. $jieqi = $this->getJieQi($y, $m, $d);
  370. if ($jieqi) array_push($festivals, $jieqi);
  371. return implode('/', $festivals);
  372. }
  373. /*
  374. * 获取当前时间属于哪个时辰
  375. @param int $time 时间戳
  376. */
  377. function getTheHour($h)
  378. {
  379. $d = $h;
  380. if ($d == 23 || $d == 0) {
  381. return '子时';
  382. } else if ($d == 1 || $d == 2) {
  383. return '丑时';
  384. } else if ($d == 3 || $d == 4) {
  385. return '寅时';
  386. } else if ($d == 5 || $d == 6) {
  387. return '卯时';
  388. } else if ($d == 7 || $d == 8) {
  389. return '辰时';
  390. } else if ($d == 9 || $d == 10) {
  391. return '巳时';
  392. } else if ($d == 11 || $d == 12) {
  393. return '午时';
  394. } else if ($d == 13 || $d == 14) {
  395. return '未时';
  396. } else if ($d == 15 || $d == 16) {
  397. return '申时';
  398. } else if ($d == 17 || $d == 18) {
  399. return '酉时';
  400. } else if ($d == 19 || $d == 20) {
  401. return '戌时';
  402. } else if ($d == 21 || $d == 22) {
  403. return '亥时';
  404. }
  405. }
  406. }