Laravel 更改 where 子句中的日期格式以匹配 Carbon::now()

Laravel change date format in where clause to match Carbon::now()

我需要 select 条目基于未来发生的日期和
条目包含日期格式:

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();

我认为您真的不需要检查日期格式。此外,您在查询中有一些冗余的东西。只需这样做:

Booking::where('uid', auth()->id())->where('date', '>=', now())->get();

如果同一列中某些行的日期格式确实不同,您确实需要解决这个问题,而不是为此做一些肮脏的修复。

您需要使用 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

$bookings = DB::table('booking')
    ->select('booking.*')
    ->where('booking.uid', '=', Auth::id())
    ->where(DB::raw("(DATE_FORMAT(booking.date,'%Y-%m-%d'))"), ">=", $now)
    ->get();