【问题标题】:Laravel change date format in where clause to match Carbon::now()Laravel 在 where 子句中更改日期格式以匹配 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)。

标签: php laravel date-formatting laravel-query-builder


【解决方案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();

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2018-03-11
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多