Laravel Eloquent按特定格式比较日期

时间:2018-04-30 08:35:41

标签: laravel date laravel-5 eloquent

我在比较Laravel中的日期时遇到一些麻烦,其中日期是特定格式。 数据库中的字段具有类似此d-m-Y(20-04-2018)的日期,我正在尝试获得此日期大于使用此日期的日期的结果。

$check= Usersubstitutions::where([
   ['user_id', '=', $request->user],
   ['date_to', '>=', date("d-m-Y")]
])->first();

它永远不会奏效。我使用foreach并且它表示20-05-2018不大于04-04-2018。

4 个答案:

答案 0 :(得分:2)

将您的列转换为日期格式,例如DATE,然后它将按预期工作。

答案 1 :(得分:1)

由于您的字段是varchar,请先将其强制转换为DATE,然后将其与date('d-m-Y')进行比较,如:

$check= Usersubstitutions::where('user_id', $request->user)
    ->where(DB::raw("DATE(date_to) >= '".date('d-m-Y')."'"))
    ->first();

注意:最好将数据库中的字段类型转换为“DATE”。

答案 2 :(得分:0)

在Laravel 4+上你可以使用

->whereDate('date_to', '>=', date("d-m-Y")

有关更多示例,请参阅#3946和此Laravel Daily文章的第一条消息。

但您也可以使用 - > where(),因为它更方便。

试试这个:

$dayAfter = (new date()->modify('+1 day')->format('d-m-Y');

->where('date_to', '>=', $dayAfter)

希望它有所帮助。如果没有查看此qn以获得进一步的解释

答案 3 :(得分:0)

您似乎将DATE存储在varchar字段中。那不是个好主意。您需要重新创建表并使用标准SQL date_to格式存储DATE作为日期(插入时使用格式Y-m-d)或将列转换为日期选择:

$check= Usersubstitutions::where([
  ['user_id', '=', $request->user],
  [\DB::raw("STR_TO_DATE(date_to,'%d-%m-%Y')")  ', '>=', date("Y-m-d")]
])->first();

请注意,这将使任何索引无效,并使查询非常(非常)缓慢运行。

注意:STR_TO_TIME仅限MySQL,但在其他DBMS中也有等价物,例如在SQL Server中它似乎是CONVERT(DATE, date_to, 105)