laravel中按時間日期進行分組統計
摘要:
按日期進行分組
//統計七天內註冊使用者數量按天進行分組
$user = DB::table('users')->whereBetween('created_at',['2018-01-01','2018-01-07...
按日期進行分組
//統計七天內註冊使用者數量按天進行分組 $user = DB::table('users')->whereBetween('created_at',['2018-01-01','2018-01-07']) ->selectRaw('date(created_at) as date,count(*) as value') ->groupBy('date')->get(); #獲取的使用者分組資料 { "date": "2018-01-01",#日期 "value": 199#數量 { "date": "2018-01-02", "value": 298 }, { "date": "2018-01-03", "value": 1000 } #在進行圖表統計的時候直接從資料庫取得資料有些日期可能是沒有的,就需要我們手動進行補全一些日期 #計算日期內天數 $stimestamp = strtotime($start_time); $etimestamp = strtotime($end_time); #計算日期段內有多少天 $days = ($etimestamp - $stimestamp) / 86400; #儲存每天日期 $date = array(); for($i = 0;$i < $days;$i++){ $date[] = date('Y-m-d', $stimestamp + (86400 * $i)); } #迴圈補全日期 foreach ($date as $key => $val){ $data[$key] = [ 'date' => $val, 'value' => 0 ]; foreach ($user as $item => $value){ if($val == $value['date']){ $data[$key] = $value; } } } return $data;
按月份進行分組
#統計一年內註冊使用者數量按月份進行分組 $user = DB::table('users')->whereBetween('created_at',['2018-01-01','2018-12-31']) ->selectRaw('DATE_FORMAT(created_at,"%Y-%m") as date,COUNT(*) as value') ->groupBy('date')->get(); #獲取的使用者分組資料 { "date": "2018-01",#月份 "value": 1497#數量 }, { "date": "2018-02", "value": 2354 }, { "date": "2018-03", "value": 4560 } #在進行圖表統計的時候直接從資料庫取得的資料有的月份可能是沒有的,不過月份比較少可直接寫死,同樣也需要補全 $year = date('Y',time()); #一年的月份 $month = [ 0 => $year.'-01', 1 => $year.'-02', 2 => $year.'-03', 3 => $year.'-04', 4 => $year.'-05', 5 => $year.'-06', 6 => $year.'-07', 7 => $year.'-08', 8 => $year.'-09', 9 => $year.'-10', 10 => $year.'-11', 11 => $year.'-12', ]; #迴圈補全月份 foreach ($month as $key => $val){ $data[$key] = [ 'date' => $val, 'value' => 0 ]; foreach ($user as $item => $value){ if($val == $value['date']){ $data[$key] = $value; } } } return $data;