php - 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 的数据
提前致谢。
解决方案
由于您将两者的时间戳都设置为 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 之间的记录。
推荐阅读
- octopus-deploy - Azure Databricks CI/CD - 八达通问题
- c# - 设置字典中布尔数组的大小
- reactjs - 无法投射“rncamera.rctcamera viewmanager”类型的对象
- android-tv - 如何以编程方式更改 Android TV 操作按钮文本颜色?
- angularjs - 如何从服务激活微调器指令
- node.js - 有没有办法检查 NodeJs 计划的最后一个作业执行状态?
- locking - 使用互斥锁的缓冲区错误“越界读/写”
- javascript - Node js Next is not a function in passport strategy 错误
- reactjs - 嵌套路由反应使用局部范围变量?
- azure - 如何在执行命令之前测试 Azure SQL 数据库的负载?