DateHandles.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. namespace Biz\Datetime;
  3. /**
  4. * basetime
  5. */
  6. class DateHandles {
  7. /**
  8. * 时间信息获取
  9. * @var string
  10. */
  11. /*
  12. *@params $params type array [类型:pre上一个,cur当前,next下一个;指定日期;日期区间起始时间;天数][日期区间截止时间]
  13. *return res type array [start:起始时间][end:截止时间]
  14. */
  15. /*
  16. "date_circle":[{"year":{"type":(-1,0,1)},"month":{"type":(-1,0,1),"num":[8,18,28],"range":{"start":"2","end":"29"}},"week":["type":(-1,0,1),,"num":[1,2,3],"range":{"start":"2","end":"7"}],"day":["type":(-1,0,1),,"num":[1,2,3],"range":{"start":"2","end":"7"}]}
  17. */
  18. //获取月份相关时间
  19. function GetDateDetailsBymonth($params=array()){
  20. /*$params = array(
  21. 'type' => -1,
  22. 'num' =>array(8,18,28),
  23. 'range' => array(['start'=>2,'end'=>29]),
  24. );*/
  25. if(empty($params))return -52101;
  26. $res = array();
  27. $par = array();
  28. $mo = C()->get('months');
  29. $dates = C()->get('dates');
  30. $areas = C()->get('areas');
  31. $v = isset($params['type'])?$params['type']:0;
  32. if($v==-1){
  33. $par[0] = 'pre';
  34. $m = date('Y-m',strtotime('-1month'));
  35. }else if($v==0){
  36. $par[0] = 'cur';
  37. $m = date('Y-m',time());
  38. }else{
  39. $par[0] = 'next';
  40. $m = date('Y-m',strtotime('+1month'));
  41. }
  42. $par[0] = ($v==-1)?'pre':($v==0?'cur':'next');
  43. $res['type'][] = $mo->parseTime($par);
  44. if(isset($params['num']) && count($params['num'])>0){
  45. foreach ($params['num'] as $nk => $nv) {
  46. $par[0] = $m.'-'.$nv;
  47. $res['num'][] = $dates->parseTime($par);
  48. }
  49. }
  50. if(isset($params['range']) && count($params['range'])>0){
  51. if(isset($params['range']['start'])){
  52. $par[0] = $m.'-'.$params['range']['start'];
  53. $par[1] = $m.'-'.$params['range']['end'];
  54. $res['range'][] = $areas->parseTime($par);
  55. }else{
  56. foreach ($params['range'] as $nk => $nv) {
  57. $par[0] = $m.'-'.$nv['start'];
  58. $par[1] = $m.'-'.$nv['end'];
  59. $res['range'][] = $areas->parseTime($par);
  60. }
  61. }
  62. }
  63. return $res;
  64. }
  65. //获取日期相关时间
  66. function GetDateDetailsByday($params=array()){
  67. /*$params = array(
  68. 'type' => 1,
  69. 'num' =>array(8,18,22),
  70. 'range' => array('start'=>2,'end'=>22),
  71. );*/
  72. if(empty($params))return -52101;
  73. $res = array();
  74. $par = array();
  75. $days = C()->get('days');
  76. $hours = C()->get('hours');
  77. $areah = C()->get('areah');
  78. $v = isset($params['type'])?$params['type']:0;
  79. if($v==-1){
  80. $par[0] = 'pre';
  81. $d = date('Y-m-d',strtotime('-1day'));
  82. }else if($v==0){
  83. $par[0] = 'cur';
  84. $d = date('Y-m-d',time());
  85. }else{
  86. $par[0] = 'next';
  87. $d = date('Y-m-d',strtotime('+1day'));
  88. }
  89. $par[0] = ($v==-1)?'pre':($v==0?'cur':'next');
  90. $res['type'][] = $days->parseTime($par);
  91. if(isset($params['num']) && count($params['num'])>0){
  92. foreach ($params['num'] as $nk => $nv) {
  93. $par[0] = $d.' '.$nv.':00:00';
  94. $res['num'][] = $hours->parseTime($par);
  95. }
  96. }
  97. if(isset($params['range']) && count($params['range'])>0){
  98. if(isset($params['range']['start'])){
  99. $par[0] = $d.' '.$params['range']['start'].':00:00';
  100. $par[1] = $d.' '.$params['range']['end'].':00:00';
  101. $res['range'][] = $areah->parseTime($par);
  102. }else{
  103. foreach ($params['range'] as $nk => $nv) {
  104. $par[0] = $d.' '.$nv['start'].':00:00';
  105. $par[1] = $d.' '.$nv['end'].':00:00';
  106. $res['range'][] = $areah->parseTime($par);
  107. }
  108. }
  109. }
  110. return $res;
  111. }
  112. //获取年相关时间
  113. function GetDateDetailsByyear($params=array()){
  114. /*$params = array(
  115. 'type' => 1,
  116. );*/
  117. if(empty($params))return -52101;
  118. $res = array();
  119. $par = array();
  120. $years = C()->get('years');
  121. $v = isset($params['type'])?$params['type']:0;
  122. $par[0] = ($v==-1)?'pre':($v==0?'cur':'next');
  123. $res['type'][] = $years->parseTime($par);
  124. return $res;
  125. }
  126. //获取周相关时间
  127. function GetDateDetailsByweek($params=array()){
  128. $params = array(
  129. 'type' => 1,
  130. 'num' =>array(2,4,5),
  131. 'range' => array('start'=>2,'end'=>7),
  132. );
  133. if(empty($params))return -52101;
  134. $res = array();
  135. $par = array();
  136. $weeks = C()->get('weeks');
  137. $dates = C()->get('dates');
  138. $areas = C()->get('areas');
  139. $w = date('w');
  140. $w = ($w==0)?7:$w;
  141. $v = isset($params['type'])?$params['type']:0;
  142. if($v==-1){
  143. $par[0] = 'pre';
  144. $cd = -7;
  145. }else if($v==0){
  146. $par[0] = 'cur';
  147. $cd = 0;
  148. }else{
  149. $par[0] = 'next';
  150. $cd = 7;
  151. }
  152. $res['type'][] = $weeks->parseTime($par);
  153. if(isset($params['num']) && count($params['num'])>0){
  154. foreach ($params['num'] as $nk => $nv) {
  155. $cw = $nv-$w+$cd;
  156. $str = ($cw==0)?'':($cw>0?'+'.$cw.'day':$cw.'day');
  157. $par[0] = date('Y-m-d',strtotime($str));
  158. $res['num'][] = $dates->parseTime($par);
  159. }
  160. }
  161. if(isset($params['range']) && count($params['range'])>0){
  162. if(isset($params['range']['start'])){
  163. $cw = $params['range']['start']-$w+$cd;
  164. $str = ($cw==0)?'':($cw>0?'+'.$cw.'day':$cw.'day');
  165. $par[0] = date('Y-m-d',strtotime($str));
  166. $cw = $params['range']['end']-$w+$cd;
  167. $str = ($cw==0)?'':($cw>0?'+'.$cw.'day':$cw.'day');
  168. $par[1] = date('Y-m-d',strtotime($str));
  169. $res['range'][] = $areas->parseTime($par);
  170. }else{
  171. foreach ($params['range'] as $nk => $nv) {
  172. $cw = $nv['start']-$w+$cd;
  173. $str = ($cw==0)?'':($cw>0?'+'.$cw.'day':$cw.'day');
  174. $par[0] = date('Y-m-d',strtotime($str));
  175. $cw = $nv['end']-$w+$cd;
  176. $str = ($cw==0)?'':($cw>0?'+'.$cw.'day':$cw.'day');
  177. $par[1] = date('Y-m-d',strtotime($str));
  178. $res['range'][] = $areas->parseTime($par);
  179. }
  180. }
  181. }
  182. return $res;
  183. }
  184. }