Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期之间的Laravel搜索日期相同时无结果(从今天获取结果)_Php_Laravel_Date_Between - Fatal编程技术网

Php 日期之间的Laravel搜索日期相同时无结果(从今天获取结果)

Php 日期之间的Laravel搜索日期相同时无结果(从今天获取结果),php,laravel,date,between,Php,Laravel,Date,Between,我有一个约会表,其中我将约会开始日期和时间存储在日期时间字段中。我有一系列的方法,我使用这些方法来获得在特定日期或两个给定日期之间开始的约会。例如: 日历类: public function today() { $start = Carbon::now()->hour('00')->minute('00')->second('00'); $end = Carbon::now()->hour('23')->minute('59')->second

我有一个
约会表
,其中我将约会开始日期和时间存储在
日期时间
字段中。我有一系列的方法,我使用这些方法来获得在特定日期或两个给定日期之间开始的约会。例如:

日历类:

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();
}
请尝试以下代码

return static::whereBetween(Db:raw('DATE(date)'), array(
    $start->format('Y-m-d'),
    $end->format('Y-m-d')
))->get();
这会将DATETIME字段强制转换为DATE

请尝试以下代码

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

我认为问题在于日期字段很可能有一个时间分量,如果要比较日期之间的时间分量,则需要截断该分量

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

我实际上是用它来搜索生日的,但是按月份和日期。我不知道这样的约会我也可以用这个。太棒了,谢谢你:)我实际上是用这个来搜索生日的,但是是按月份和日期。我不知道这样的约会我也可以用这个。真棒,谢谢:)非常感谢,回答也很好:)非常感谢,回答也很好:)