subDays(3)->startOfDay(); // 三天前的开始时间 $date = Db::table('user_phone_log') ->selectRaw('DATE(created_at) AS date') ->where('created_at', '<=', $threeDaysAgo) ->groupByRaw('DATE(created_at)') ->orderBy('date') ->get(); foreach ($date as $v) { // var_dump($v->date); $date = $v->date; // 使用 Carbon 格式化日期为一天的开始和结束 $startOfDay = Carbon::parse($date)->startOfDay(); $endOfDay = Carbon::parse($date)->endOfDay(); // 查询指定日期的记录 $logs = UserPhoneLog::whereBetween('created_at', [$startOfDay, $endOfDay]) ->selectRaw('phone, SUM(time) AS total_time') // 按照手机号分组,统计总时长 ->groupBy('phone') ->get(); var_dump($date); // 处理每个手机的在线时长 foreach ($logs as $log) { // 在这里可以处理每个手机的在线时长,如记录日志、更新数据库等 echo "Phone: {$log->phone}, Total Time: {$log->total_time}" . PHP_EOL; $UserPhoneDayLog=new UserPhoneDayLog(); $UserPhoneDayLog->phone=$log->phone; $UserPhoneDayLog->created_at=$startOfDay; $UserPhoneDayLog->updated_at=$startOfDay; $UserPhoneDayLog->time=$log->total_time; $UserPhoneDayLog->save(); } UserPhoneLog::whereBetween('created_at', [$startOfDay, $endOfDay])->delete(); } } }