首页 > 解决方案 > laravel whereBetween 不检查最后一个值(日期)

问题描述

我发现 laravelwhereBetween()没有检查我给出的最后一个值(日期),或者我的代码可能是错误的。你能检查我的代码还是我的假设是正确的?另一个解决方案可能是存储的时间created_at

我的代码如下

$new_from = date('Y-m-d', strtotime($request->from)); // 2020-06-15
$new_to = date('Y-m-d', strtotime($request->to)); // 2020-06-17

$vehicle = Vehicle::findOrFail($request->vehicle);

//if I remove below $check_from and $check_to and check request()->from and to, still gives same data
$check_from = Carbon::parse($new_from)->startOfDay()->toDateTimeString();
$check_to = Carbon::parse($new_to)->startOfDay()->toDateTimeString();

$vehicleDetails = VehicleDetail::where('imei', $vehicle->imei)->whereBetween('created_at', [$check_from, $check_to])->get();

解释:我在 2020 年 6 月 15 日和 17 日创建了数据。但是当我尝试从上面的代码中获取时,它只返回 2020-06-15 的数据,而不是 17。

当我更改时request()->to = 2020-06-18,它会提供 15 和 17 的数据

提前致谢。

标签: phplaravel

解决方案


由于您将两者的时间戳都设置为 startOfDay,因此您正在查找 2020-06-15 00:00:00 和 2020-06-17 00:00:00 之间的记录。这意味着它不会找到 17 日的任何记录,因为任何记录都将在午夜之后。相反,将结束日期更改为一天的结束。

$check_to = Carbon::parse($new_to)->endOfDay()->toDateTimeString();

现在将获得 2020-06-15 00:00:00 和 2020-06-17 23:59:59 之间的记录。


推荐阅读