Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()
Posted
技术标签:
【中文标题】Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()【英文标题】:Laravel change date format in where clause to match Carbon::now() 【发布时间】:2018-06-10 02:33:58 【问题描述】:我需要根据未来发生的日期和 条目包含日期格式:
12/30/17
我正在尝试格式化日期并与 Carbon::now() 时间戳进行比较,但没有运气。
$now = \Carbon\Carbon::now();
$bookings = DB::table('booking')
->select('booking.*')
->where('booking.uid', '=', Auth::id())
->where(DB::raw("(DATE_FORMAT(booking.date,'%Y-%m-%d 00:00:00'))"), ">=", $now)
->get();
【问题讨论】:
为什么你的日期不是以标准格式出现在你的表格中? 我希望是这样。目前我无法控制。 @Klav 你是什么意思你无法控制?您可以编写一个简单的查询来将所有日期行更改为单一格式。 @AlexeyMezenin 因为更改表格中的日期格式并不是唯一需要更新的事情。 @Klav 好吧,这是在这种情况下唯一正确的方法。以不同的格式保持行是无稽之谈。我怀疑做相关修复太难了(移除重新发明的***并改用 Carbon)。 【参考方案1】:您需要使用STR_TO_DATE 来转换字符串。
$bookings = DB::table('booking')
->select('booking.*')
->where('booking.uid', '=', Auth::id())
->where(DB::raw("(STR_TO_DATE(booking.date,'%m/%d/%y'))"), ">=", $now)
->get();
STR_TO_DATE 会将12/30/17
转换为2017-12-30
【讨论】:
现在好了,我有改变方法并且工作正常@aynber【参考方案2】:我认为您确实不需要检查日期格式。此外,您的查询中有一些多余的东西。只需这样做:
Booking::where('uid', auth()->id())->where('date', '>=', now())->get();
如果同一列中某些行的日期格式确实不同,您确实需要解决这个问题,而不是为此做一些肮脏的修复。
【讨论】:
我最初尝试过,但它不能正确地提取日期。 >= 什么都不拉, 【参考方案3】:$bookings = DB::table('booking')
->select('booking.*')
->where('booking.uid', '=', Auth::id())
->where(DB::raw("(DATE_FORMAT(booking.date,'%Y-%m-%d'))"), ">=", $now)
->get();
【讨论】:
以上是关于Laravel 在 where 子句中更改日期格式以匹配 Carbon::now()的主要内容,如果未能解决你的问题,请参考以下文章