Laravel 在日期之间搜索如果日期相同则没有结果(获取今天的结果)

Laravel search between dates no results when dates are the same (get results from today)

我有一个 appointments table,我将约会开始日期和时间存储在 datetime 字段中。我有很多方法可以用来获取在特定日期或两个给定日期之间开始的约会。例如:

日历Class:

public function today()
{
    $start = Carbon::now()->hour('00')->minute('00')->second('00');
    $end = Carbon::now()->hour('23')->minute('59')->second('00');

    return Appointment::getAppointments($this->start, $this->end);
}

// public function tomorrow();
// public function thisMonth();

预约模型:

public static function getAppointments($start, $end)
{
    return static::whereBetween('date', array(
        $start->format('Y-m-d H:i'),
        $end->format('Y-m-d H:i')
    ))->get();
}

如您所见,我需要设置小时、分钟和秒,否则如果开始日期和结束日期相同,则不会 return 任何结果。是否可以简单地执行以下操作并仍然获得该日期的结果?

public function today()
{
    $start = Carbon::now();
    $end = Carbon::now();

    return Appointment::getAppointments($this->start, $this->end);
}

public static function getAppointments($start, $end)
{
    return static::whereBetween('date', array(
        $start->format('Y-m-d'),
        $end->format('Y-m-d')
    ))->get();
}

试试下面的代码

return static::whereBetween(Db:raw('DATE(date)'), array(
    $start->format('Y-m-d'),
    $end->format('Y-m-d')
))->get();

这会将 DATETIME 字段转换为 DATE

我认为问题在于您的日期字段很可能有一个时间组件,如果您要比较它是否在日期之间,则需要截断该时间组件。

确保在控制器顶部导入 db 命名空间

use DB;

这会将日期转换为 Y-m-d,以便它介于您的日期之间

public static function getAppointments($start, $end)
{
    return static::whereBetween(DB::raw('CAST(date as DATE)', array(
        $start->format('Y-m-d'),
        $end->format('Y-m-d')
    ))->get();
}