//根據format字符串格式化date值。下列修飾符可以被用在format字符串中: //%M 月名字(January……December) //%W 星期名字(Sunday……Saturday) //%D 有英語前綴的月份的日期(1st, 2nd, 3rd, 等等。) //%Y 年, 數字, 4 位 //%y 年, 數字, 2 位 //%a 縮寫的星期名字(Sun……Sat) //%d 月份中的天數, 數字(00……31) //%e 月份中的天數, 數字(0……31) //%m 月, 數字(01……12) //%c 月, 數字(1……12) //%b 縮寫的月份名字(Jan……Dec) //%j 一年中的天數(001……366) //%H 小時(00……23) //%k 小時(0……23) //%h 小時(01……12) //%I 小時(01……12) //%l 小時(1……12) //%i 分鍾, 數字(00……59) //%r 時間,12 小時(hh:mm:ss [AP]M) //%T 時間,24 小時(hh:mm:ss) //%S 秒(00……59) //%s 秒(00……59) //%p AM或PM //%w 一個星期中的天數(0=Sunday ……6=Saturday ) //%U 星期(0……52), 這里星期天是星期的第一天 //%u 星期(0……52), 這里星期一是星期的第一天 //%% 一個文字“%”。
/** * 概覽統計 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function overviewStatistical(Request $request) { $time_quantum=$request->input('time_quantum') ?? 'month'; $start=$request->input('start') ?? '2019-01-01'; $end=$request->input('end') ?? '2020-01-01'; $user_id=$request->user()->id; $item_id=ImOrganize::where('user_id',$user_id)->value('id'); $item_id=28; switch ($time_quantum){ case 'days': $sort='%Y-%m-%d'; $size='days'; $data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size); break; case 'weeks': $sort='%Y-%u'; $size='weeks'; $data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size); break; default: $sort='%Y-%m'; $size='months'; $data=$this->monthOverviewStatistical($item_id,$start,$end,$sort,$size); } return response()->json($data)->setStatusCode(200); } /** * 粒度數據統計 * @param $item_id * @param $start * @param $end * @return mixed */ public function monthOverviewStatistical($item_id,$start,$end,$sort,$size) { //項目關注人數走勢(單位千人) $data['user_item']=$this->getTotalMonthItem($item_id,$start,$end,$sort,$size); //項目關聯社區id $group_id=Group::where('im_organize_id',$item_id)->value('id'); if(!$group_id){ $data['group_members']=0; }else{ //社區加入人數統計(單位千人) $data['group_members'] =$this->getTotalMonthGroup($group_id,$start,$end,$sort,$size) ; } //問答活躍度(單位千條) $topic_id=Topic::where('im_organize_id',$item_id)->value('id'); $questions_id=QuestionTopic::where('topic_id',$topic_id)->pluck('question_id')->toArray(); if(!$questions_id){ $data['topic_answers']=0; }else{ //話題問答人數(單位千人) $data['topic_answers'] =$this->getTotalMonthTopic($questions_id,$start,$end,$sort,$size) ; } return $data; } /** * 項目關注人數走勢(單位千人) * @param int $item_id * @param $start * @param $end * @return mixed */ public function getTotalMonthItem($item_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from user_item where im_organize_id='.$item_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('user_item') ->select(DB::raw("count(user_id)/1000 as user_count,date_format(created_at,'$sort') as $size")) ->groupBy(DB::raw("date_format(created_at,'$sort')")) ->where('im_organize_id',$item_id) ->where('created_at','>',Carbon::parse($start)) ->where('created_at','<',Carbon::parse($end)) ->get(); return $query; } /** * 社區加入人數統計(單位千人) * @param $group_id * @param $start * @param $end * @param string $month * @param string $size * @return mixed */ public function getTotalMonthGroup($group_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from group_members where group_id='.$group_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('group_members') ->select(DB::raw("count(user_id)/1000 as user_count,date_format(created_at,'$sort') as $size")) ->groupBy(DB::raw("date_format(created_at,'$sort')")) ->where('group_id',$group_id) ->where('created_at','>',Carbon::parse($start)) ->where('created_at','<',Carbon::parse($end)) ->get(); return $query; } /** * 問答活躍度 * @param $questions_id * @param $start * @param $end * @param string $sort * @param string $size * @return mixed */ public function getTotalMonthTopic($questions_id,$start,$end,$sort='%Y-%m',$size='month'){ // $arr = DB::select('select count(user_id)/1000 as "user_count",date_format(created_at,\'%y%m\') as month from group_members where group_id='.$group_id.' group by date_format(created_at,\'%y%m\')'); $query = DB::table('answers') ->select(DB::raw("count(id)/1000 as answers_count,date_format(created_at,'$sort') as $size")) ->groupBy(DB::raw("date_format(created_at,'$sort')")) ->whereIn('questions_id',$questions_id) ->where('created_at','>',Carbon::parse($start)) ->where('created_at','<',Carbon::parse($end)) ->get(); return $query; }