提问者:小点点

Laravel获取一列中的日期比另一列中的日期少或等于7天的所有记录


我在一个表中有两个日期列,created_at和encountered_at。 我想要获得concountered_at比created_at少1周的所有行。 我该如何进行它而不做任何循环?

这是一个例子

id | encountered_at | created_at   
1  | 2020-04-17     | 2020-04-23  
2  | 2020-04-17     | 2020-04-24   
3  | 2020-04-17     | 2020-11-29

前两个记录应该会出现。 我猜这是SQL中的straigt,我如何用口才实现这一点?
.。。


共3个答案

匿名用户

您可以使用whereRaw和dateDiff来实现。。。。

$result=MyModelClass::whereRaw('DATEDIFF(created_at,encountered_at)<=7')
select('*')->get();

请注意,这里的结果将包含diff小于或等于7天的行。。。如果您希望它仅为7天,您可以省略'<' 。。。。

匿名用户

通常,您希望选择*FROM表WHERE“diff OF concountered_at AND created_at LESS THAN 1 week”-因此您希望计算差异,然后测试它小于一周。 我推荐以下mysql文档页面:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_datediff

匿名用户

WhereBetween方法验证列的值是否在两个值之间。

$from = date('2020-01-01');
$to = date('2020-05-02');
Model::whereBetween('date', [$from, $to])->get();

您可以使用碳对象检查两个日期之间的日期。您可以获取当前日期,然后获取日期之间的开始日期和结束日期,然后返回true,否则返回false。

$startDate = \Carbon\Carbon::createFromFormat('Y-m-d','2020-10-01');
$endDate = \Carbon\Carbon::createFromFormat('Y-m-d','2020-10-30');
$check = \Carbon\Carbon::now()->between($startDate,$endDate);
dd($check); // return true or false