如何获取laravel表中提供的created_at列(默认列格式为Y-m-d H:i:s)之间的日期范围?

时间:2019-02-27 13:22:07

标签: database laravel laravel-5 eloquent laravel-5.7

我一直在(单一列)created_at列之间的日期范围内挣扎,到目前为止,我已经尝试过了

$startDate = date('Y-m-d', strtotime($request->start_date));
$endDate = date('Y-m-d', strtotime($request->end_date));
....->whereBetween('created_at', [$startDate,$endDate])

created_at格式默认为(Y-m-d H:i:s), 在帖子数据中,我得到的是这种格式(Y-m-d)

我知道这是错误的查询,但是我应该怎么想呢?

我必须使用->whereRaw()吗?或带有->whereDate的东西?

请帮助

3 个答案:

答案 0 :(得分:2)

您仅在whereDate()中具有Laravel的专用功能。您可以像这样使用它:

$startDate = date('Y-m-d', strtotime($request->start_date));
$endDate = date('Y-m-d', strtotime($request->end_date));
....->whereDate('created_at', '>', $startDate)->whereDate('created_at', '<', $endDate)

此外,您可以使用<=>=来包含限制。

也不必担心“默认情况下,created_at格式为(Ymd H:i:s),在帖子数据中,我将获得此格式(Ymd)”,因为该函数仅比较日期部分而不是时间戳部分,因此你很好。

引用here

答案 1 :(得分:0)

要在两个日期之间进行检查,您应该使用此代码:

$fromDate =Carbon::parse($request->start_date); 
$toDate = Carbon::parse($request->end_date);  

Model::whereBetween('created_at', [$fromDate->toDateString(), $toDate->toDateString()])->get();

答案 2 :(得分:0)

哇。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

->where('created_at', '>=', $fromDate->toDateString())->where('created_at', '<=', $toDate->toDateString())

非常感谢您,我的愚蠢。