【问题标题】:whereBetween issue, return wrong recordswhereBetween issue,返回错误记录
【发布时间】:2019-12-21 02:30:12
【问题描述】:

我对 whereBetween 日期有一个奇怪的问题 如果开始日期和结束日期相同,则不会获取结果。

假设开始日期是:2019-12-20,结束日期是 2019-12-20 但除非我对结束日期进行更改,否则我不会得到结果,例如:2019-12-21 即使我没有 2019-12-21 的任何东西,但这样做,它会从 2019-12-20 获取结果,这真的很奇怪。

代码如下:

 $start_date = Carbon::parse($request->start_date)->format('Y-m-d');
 $end_date = Carbon::parse($request->end_date)->format('Y-m-d');

 $user_listings =  UserListing::where('user_id', Auth::user()->id)
              ->where('is_found_before', 1)
              ->latest('updated_at')
              ->whereBetween('updated_at', [$start_date, $end_date])->paginate(20);

这里是截图。

并生成查询

我不明白为什么我必须选择结束日期为:2019-12-21 才能看到 2019-12-20 的结果

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    它将2019-12-20 视为2019-12-20 00:00:00,因此它排除了当天的所有内容。传入包含一天开始和结束的完整时间戳:

    // Time will be 00:00:00
    $start_date = Carbon::parse($request->start_date)->startOfDay()->toDateTimeString(); 
    // Time will be 23:59:59
    $end_date = Carbon::parse($request->end_date)->endOfDay()->toDateTimeString(); 
    

    【讨论】:

    • 你是对的,它预计为 2019-12-20 00:00:00 并排除 00:00:00 时间我使用格式('Y-m-d')所以它可以排除 00:00:00 时间戳,但它不起作用,但是您的解决方案就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2011-10-05
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多