【问题标题】:Laravel 5.4: select the records that's within 2 days onlyLaravel 5.4:仅选择 2 天内的记录
【发布时间】:2018-07-24 18:53:59
【问题描述】:

例如,我只需要提取 2 天内的所有记录 今天是 24/7,所以我需要 23/7 和 22/7 的所有记录

我试试这个

->whereRaw('DATE(created_at) = DATE_SUB(CURDATE(), INTERVAL 2 DAY)')

但没有工作它会从两天前获取记录 也试试这个

->whereDate( 'created_at', '>', Carbon::now()->subDays( 2 ) )

但它也包括我不想要的今天的记录。

我应该如何使用carbonDATE 来做到这一点

【问题讨论】:

  • 如果今天是 24/7,你想得到 23/7 和 22/7 除了 24/7 对吗?
  • @Ts8060 是的,这正是我所需要的

标签: laravel date php-carbon


【解决方案1】:

你应该这样做:

->whereDate('created_at', '>', Carbon::today()->subDays( 2 ))
->whereDate('created_at', '!=', Carbon::today());

这将排除今天。

如果您更喜欢原始查询,那么您可以这样做:

->whereBetween(\DB::raw("DATE(`created_at`)"), [ Carbon::today()->subDays(2), Carbon::today()->subDays(1) ]);

注意:使用今天是因为它使代码看起来更具表现力,但now 也可以。

【讨论】:

    【解决方案2】:

    如下:

    ->whereDate( 'created_at', '>=', Carbon::today()->subDays( 2 ) )
    ->whereDate( 'created_at', '<', Carbon::today() )
    

    【讨论】:

    • 包括今天的记录!
    【解决方案3】:

    你可以使用whereBetweenhttps://laravel.com/docs/5.6/queries#where-clauses

    ->whereBetween('created_at', [now()->subDays(2)->startOfDay(), now()->endOfDay()]) 
    

    --

    您还可以使用多个where 子句:

    ->where('created_at', '>', now()->subDays(2)->startOfDay())
    ->where('created_at', '<', now()->endOfDay())
    

    --

    你也可以使用whereDate

    ->whereDate('created_at', '>', now()->subDays(2)->startOfDay())
    ->whereDate('created_at', '<', now()->endOfDay())
    

    --

    碳文档: https://carbon.nesbot.com/docs/

    【讨论】:

    • 这给出了一个错误Call to undefined function Acme\Repositories\Supplier\now()
    • 我认为这是最好的解决方案,但我认为应该是now()-&gt;startOfDay()-&gt;subDays(2), now()-&gt;startOfDay()。获得 OP 想要的结果。
    • 你使用的是什么版本的 Laravel?您可以替换 now() 的实例并在类的顶部添加 use Carbon\Carbon; 并改为使用 Carbon::now()
    • @Josh Carbon::now()-&gt;startOfDay() 也称为Carbon::today()
    【解决方案4】:

    添加这个,可能对你有用

    ->whereDate( 'created_at', '>', Carbon::today()->subDays( 2 ) )
    ->whereDate( 'created_at', '!=', Carbon::today())
    

    【讨论】:

      【解决方案5】:

      试试 ->whereDate('created_at', 'addDays(2))

      【讨论】:

        猜你喜欢
        • 2010-12-07
        • 2013-08-28
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多