/** * 服务:将时间段按天进行分割 * @param string $start_date @起始日期('Y-m-d H:i:s') * @param string $end_date @结束日期('Y-m-d H:i:s') * @return array $mix_time_data=array( * 'start_date'=>array([N]'Y-m-d H:i:s'), * 'end_date'=>array([N]'Y-m-d H:i:s'), * 'days_list'=>array([N]'Y-m-d'), * 'days_inline'=>array([N]'Y-m-d H:i:s'), * 'times_inline'=>array([N]'time()') * ) */ function Date_segmentation($start_date, $end_date) { /******************************* 时间分割 ***************************/ //如果为空,则从今天的0点为开始时间 if (!empty($start_date)) $start_date = date('Y-m-d H:i:s', strtotime($start_date)); else $start_date = date('Y-m-d 00:00:00', time()); //如果为空,则以明天的0点为结束时间(不存在24:00:00,只会有00:00:00) if (!empty($end_date)) $end_date = date('Y-m-d H:i:s', strtotime($end_date)); else $end_date = date('Y-m-d 00:00:00', strtotime('+1 day')); //between 查询 要求必须是从低到高 if ($start_date > $end_date) { $ttt = $start_date; $start_date = $end_date; $end_date = $ttt; } elseif ($start_date == $end_date) { echo '时间输入错误'; die; } $time_s = strtotime($start_date); $time_e = strtotime($end_date); $seconds_in_a_day = 86400; //生成中间时间点数组(时间戳格式、日期时间格式、日期序列) $days_inline_array = array(); $times_inline_array = array(); //日期序列 $days_list = array(); //判断开始和结束时间是不是在同一天 $days_inline_array[0] = $start_date; //初始化第一个时间点 $times_inline_array[0] = $time_s; //初始化第一个时间点 $days_list[] = date('Y-m-d', $time_s);//初始化第一天 if ( date('Y-m-d', $time_s) == date('Y-m-d', $time_e) ) { $days_inline_array[1] = $end_date; $times_inline_array[1] = $time_e; } else { /** * A.取开始时间的第二天凌晨0点 * B.用结束时间减去A * C.用B除86400取商,取余 * D.用A按C的商循环+86400,取得分割时间点,如果C没有余数,则最后一个时间点 与 循环最后一个时间点一致 */ $A_temp = date('Y-m-d 00:00:00', $time_s + $seconds_in_a_day); $A = strtotime($A_temp); $B = $time_e - $A; $C_quotient = floor($B / $seconds_in_a_day); //商舍去法取整 $C_remainder = fmod($B, $seconds_in_a_day); //余数 $days_inline_array[1] = $A_temp; $times_inline_array[1] = $A; $days_list[] = date('Y-m-d', $A); //第二天 for ($increase_time = $A, $c_count_t = 1; $c_count_t <= $C_quotient; $c_count_t++) { $increase_time += $seconds_in_a_day; $days_inline_array[] = date('Y-m-d H:i:s', $increase_time); $times_inline_array[] = $increase_time; $days_list[] = date('Y-m-d', $increase_time); } $days_inline_array[] = $end_date; $times_inline_array[] = $time_e; } return array( 'start_date' => $start_date, 'end_date' => $end_date, 'days_list' => $days_list, 'days_inline' => $days_inline_array, 'times_inline' => $times_inline_array ); }
将时间段按天进行分割
最新推荐文章于 2024-05-13 10:54:58 发布