从Mysql Database Timestamp Laravel中仅选择当前周的记录

时间:2014-11-30 01:54:53

标签: php mysql date laravel eloquent

我想只获得当周星期一到星期五的记录,但我很难思考和研究如何做到的方法,我在互联网上找到了一些方法,但它很难了解像我这样的新手,所以这是我的代码:

         $myquery=DB::table('attendances')
        ->leftJoin('employees', 'attendances.user_id', '=', 'employees.id')
        ->where('user_id', '=', $employee->id)

        //I want to do something like this one
         ->WHERE WEEK(`date`) = WEEK(NOW()  

        ->orderBy('attendances.date','asc')->get();

我实现了一些像这样的答案

         $myquery=DB::table('attendances')
        ->leftJoin('employees', 'attendances.user_id', '=', 'employees.id')
        ->where("WEEKOFYEAR(`date`)", "=", "WEEKOFYEAR(NOW())")
        ->where('user_id', '=', $employee->id)
        ->orderBy('attendances.logon','asc')->get();

5 个答案:

答案 0 :(得分:3)

您可以使用whereBetween和两个Carbon日期实例:

->whereBetween('date', [
    Carbon\Carbon::parse('last monday')->startOfDay(),
    Carbon\Carbon::parse('next friday')->endOfDay(),
])

如果要查找当月的所有记录,请使用:

->whereBetween('date', [
    Carbon\Carbon::now()->startOfMonth(),
    Carbon\Carbon::now()->endOfMonth(),
])

答案 1 :(得分:0)

您需要使用WEEKOFYEAR()而不只是WEEK,它会获得一年中的当前周指数。因此,同一周的两个日期将返回相同的WEEKOFYEAR。在普通的SQL中,它看起来像:

... WHERE WEEKOFYEAR(`date`) = WEEKOFYEAR(NOW())

在laravel中:

->where("WEEKOFYEAR(`date`)", "=", "WEEKOFYEAR(NOW())")

答案 2 :(得分:0)

我尝试像

这样的东西

->where('WEEK(FROM_UNIXTIME(`date`))', '=', 'WEEK(NOW())') ->where('DAYOFWEEK(FROM_UNIXTIME(`date`))', '>=', 2) ->where('DAYOFWEEK(FROM_UNIXTIME(`date`))', '<=', 6)

答案 3 :(得分:0)

获取当周的数据,不包括星期六和星期日:

$query->where(DB::Raw('week(date)'), '=', Carbon::now()->weekOfYear)
      ->where(function($query){
             return $query->where(DB::Raw('day(date)'),'<>',Carbon::SUNDAY)
                          ->orWhere(DB::Raw('day(date)'), '<>',Carbon::SATURDAY); });

答案 4 :(得分:0)

那呢? (雄辩/ Laravel 5.6)

Model::whereMonth('created_at', '=', date('Y'));

有据可查,效果很好:Queries