【问题标题】:Laravel find records between two datesLaravel 查找两个日期之间的记录
【发布时间】:2019-11-23 08:00:44
【问题描述】:

我正在为 laravel 中两个日期之间的查找记录进行以下编码 但它没有给出今天的 created_at 记录

$start_date = date('Y-m-d', strtotime($request->get('start_date')));

$end_date = date('Y-m-d', strtotime($request->get('end_date')));

$shipments = Shipments::with(['pick_up_address', 'delivery_address', 'empty_return', 'empty_pick_up'])->get();

if($request->has('start_date') && $request->has('end_date')) {
    $shipments = $shipments->where('created_at', '<=', $end_date)->where('created_at', '>=', $start_date);
} else if($request->has('start_date')) {
    $shipments = $shipments->where('created_at', '>=', $start_date);
} else if($request->has('end_date')) {
    $shipments = $shipments->where('created_at', '<=', $end_date);
} else {
    $shipments = Shipments::with(['pick_up_address', 'delivery_address', 'empty_return', 'empty_pick_up'])->get();
}

created_at 是时间戳。 我的服务器时区是 UTC。 请给我适当的解决方案。 提前致谢。

【问题讨论】:

  • 能否包含start_dateend_date GET 参数的示例数据。
  • $start_date=11/23/2019 $end_date=11/24/2019
  • whereBetweenbtw
  • 你找到答案了吗?

标签: php mysql laravel eloquent


【解决方案1】:

只需使用此查询

$shipments = DB::table('shipments')
->whereBetween('dates', [$startDate, $endDate])
->get();

【讨论】:

    【解决方案2】:
    1. 您首先在 Eloquent\Builder 上使用 -&gt;get()。 那么whereget() 之后将无法工作。

    2. 因为您的created_at 是时间戳,所以我认为您需要将$end_date 转换为一天的结束,并将$start_date 转换为一天的开始。

    试试这个代码:

    $start_date = date('Y-m-d 00:00:00', strtotime($request->get('start_date')));
    
    $end_date = date('Y-m-d 23:59:59', strtotime($request->get('end_date')));
    
    $shipments = Shipments::with(['pick_up_address', 'delivery_address', 'empty_return', 'empty_pick_up']);
    
    if($request->has('start_date')) 
    {
    
           $shipments->where('created_at', '>=', $start_date);
    }
    
    if ($request->has('end_date')) 
    {
           $shipments->where('created_at', '<=', $end_date);
    }
    
    $shipments = $shipments->get();
    

    【讨论】:

    • 它工作正常,但问题是它没有提供今天的记录。
    • @HinalShah 今天在你的$start_date$end_date 之间?我想你想要的是,如果没有start_dateend_date,则退回所有货物;如果有start_date,则在start_date之后退货;如果两者都存在,则在两者之间返回。
    • @HinalShah 我认为您的今天已经超出了 $end_date ,但日期相同。因此,您需要将其转换为一天结束。我已经更新了我的答案。
    • 很好。它给了我今天的记录,但是如果 start_date 和 end_date 是空的,我该怎么办。
    • @HinalShah 如果start_dateend_date 为空,则返回全部。如果start_dateend_date 之间没有记录,则返回空。
    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 2020-07-19
    • 2017-03-27
    • 2017-05-02
    • 2017-05-17
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多