当日期相同时,Laravel在日期之间搜索没有结果(从今天获得结果)

时间:2016-08-02 10:09:15

标签: php laravel date between

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

日历类:

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

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

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

2 个答案:

答案 0 :(得分:1)

尝试以下代码

$state.go('[your state name]');

这会将DATETIME字段转换为DATE

答案 1 :(得分:1)

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

确保在控制器顶部导入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();
}