我在比较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。
答案 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)