【问题标题】:Select only records of the current week from Mysql Database Timestamp Laravel从 Mysql 数据库时间戳 Laravel 中仅选择本周的记录
【发布时间】:2026-02-17 13:20:03
【问题描述】:

我只想获取本周周一到周五的记录,但我很难思考和研究如何做到这一点,我在互联网上找到了一些方法,但很难理解对于像我这样的新手,这是我的代码:

         $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();

【问题讨论】:

    标签: php mysql date laravel eloquent


    【解决方案1】:

    您将希望使用WEEKOFYEAR() 而不仅仅是WEEK,后者会获取一年中的当前周索引。所以同一周内的两个日期将返回相同的WEEKOFYEAR。在普通 SQL 中,它看起来像:

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

    在 laravel 中:

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

    【讨论】:

    • 感谢您的回复先生,但我在 laravel 代码上收到错误 50
    • 你是如何整合答案的?
    • @user3177305 在代码中date 是什么?它是否在任何地方定义?尝试添加类似'2014-01-01' 的字符串,是否仍会导致 500 错误?
    • 仍然收到错误先生,如果我使用 WhereOr 则没有错误但输出错误
    • 如果是时间戳,则将其转换为日期。 Laravel 可能会将第一个属性视为一个列。试试原始 SQL 怎么样:->whereRaw('WEEKOFYEAR(DATE(`date`)) = WEEKOFYEAR(NOW())');
    【解决方案2】:

    我会尝试类似的东西

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

    【讨论】:

    • 考虑将查询包装在 try/catch 中,这样错误就更明显了。此外,我更新了查询以说明您使用 unix 时间戳作为列的事实,正如您在另一条评论中所述。
    【解决方案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(),
    ])
    

    【讨论】:

    • 当月所有记录怎么样?
    • @Mark - 添加到我的答案中。
    • 如果今天是星期一,则返回前一周的星期一,这是不行的。最好使用 Carbon::now()->startOfWeek() 和 Carbon::now()->endOfWeek()。
    【解决方案4】:

    要获取当前一周的数据,不包括周六和周日:

    $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); });
    

    【讨论】:

      【解决方案5】:

      这个呢? (雄辩/ Laravel 5.6)

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

      它有据可查,效果很好:Queries

      【讨论】:

      • 这对月份范围很有用,但不能解决问题。
      最近更新 更多