代码之家  ›  专栏  ›  技术社区  ›  JsWizard

从时间戳中获取每月数据并按同一月份排序

  •  0
  • JsWizard  · 技术社区  · 6 年前

    我试图按每月总持续时间显示表,所以我按时间戳的相同每月数据的持续时间排序,但我不能。

    我的目标是通过返回一个对象或数组的值来创建一个表。

    public function monthlyResult(Request $request = null)
    {
      $user_id = Auth::user()->id;
    
             if($request){
                $year = $request->year;
                $month = $request->month;
             }
             else{
                $year = date('Y');
             }
    
    
             $monthlyResult = DB::table('workings')
            ->where('user_id', $user_id)
            ->whereYear('created_at', $year)
            ->orwhere(function ($query) use($user_id, $year) {
                $query->where('user_id', $user_id)
                ->whereYear('deleted_at', $year);
            })
            ->get();
    
            foreach($monthlyResult as $mResult){
              $month = date('n', strtotime($mResult->created_at));
              $duration = $mResult->duration;
    
            ---- code ----
            }
       return ;
    }
    

    月总工期|

    ——1————XXXXXXXX|

    ——2——XXXXXXXX|

    ——3————XXXXXXXX|

    ---11---XXXXXXX|

    ---12---XXXXXXX|

    1 回复  |  直到 6 年前
        1
  •  1
  •   rkj    6 年前

    可以创建关联数组并按键排序

    $results = [];
    
    foreach($monthlyResult as $mResult){
       $month = date('n', strtotime($mResult->created_at));
       $results[$month] = (isset($results[$month])) ? ($results[$month] + $mResult->duration) : $mResult->duration ;
    }
    
    //now sort $results based on key
    ksort($results);
    

    正如@c2486所提到的,您可以使用 orderBy

    $monthlyResult = DB::table('workings')
            ->where('user_id', $user_id)
            ->whereYear('created_at', $year)
            ->orwhere(function ($query) use ($user_id, $year) {
                $query->where('user_id', $user_id)
                ->whereYear('deleted_at', $year);
            })
            ->orderBy(DB::raw('month(created_at)'))
            ->get();