whereBetween('created_at', $betweenTimes)->orderBy('id')->get(); /** @var self $record */ foreach ($records as $record) { $times = array_map(function ($time) { return preg_replace("/(\d+):(\d+):\d+$/", "$1:$2", $time); }, $record->times); if (isset($array[$record->date])) { $array[$record->date] = array_merge($array[$record->date], $times); } else { $array[$record->date] = $times; } } // foreach ($array as $date => $times) { $times = array_values(array_filter(array_unique($times))); $inOrder = []; foreach ($times as $key => $time) { $inOrder[$key] = strtotime("2022-01-01 {$time}"); } array_multisort($inOrder, SORT_ASC, $times); $array[$date] = $times; } // return $array; } /** * 时间收集 * @param string $data * @param array $times * @return \Illuminate\Support\Collection */ public static function atCollect($data, $times) { $sameTimes = array_map(function($time) use ($data) { return [ "datetime" => "{$data} {$time}", "timestamp" => strtotime("{$data} {$time}") ]; }, $times); return collect($sameTimes); } /** * 签到时段 * @param array $times * @param int $diff 多长未签到算失效(秒) * @return array */ public static function atSection($times, $diff = 3600) { $start = ""; $end = ""; $array = []; foreach ($times as $time) { $time = preg_replace("/(\d+):(\d+):\d+$/", "$1:$2", $time); if (empty($start)) { $start = $time; continue; } if (empty($end)) { $end = $time; continue; } if (strtotime("2022-01-01 {$time}") - strtotime("2022-01-01 {$end}") > $diff) { $array[] = [$start, $end]; $start = $time; $end = ""; continue; } $end = $time; } if ($start) { $array[] = [$start, $end]; } return $array; } }