获取两个日期时间段之间的数据库搜索结果

时间:2019-10-09 11:01:24

标签: mysql laravel datetime date-range laravel-query-builder

在我的数据库中,有一个名为vehicle_schedule的表,所有车辆时间表都存储在该表中。在该表中,有两列名称为date_from date_to。两列类型均为datetime。当我像2019-03-20 09:00:00 2019-03-25 12:00:00这样传递日期时,我需要获取在这两个DateTime范围之间的所有车辆时间表。

到目前为止,我已经尝试过了,

$vehicleSchedule=DB::table('vehicle_schedule')
->select('vehicle_schedule.*')
->whereRaw("date_from >=? AND date_to <=?",array($date_from,$date_to))
->get();
return response()->json(["vehicleSchedule"=>$vehicleSchedule,"message"=>"Vehicle Schedule got successfully"]);

我希望所有车辆时间表都在该给定范围内。但是,它仅具有日期值之间的车辆时间表。当我检查时间限制时,它无法正常工作。

3 个答案:

答案 0 :(得分:2)

您可以为此使用Laravel whereBetween

$vehicleSchedule=DB::table('vehicle_schedule')
    ->select('vehicle_schedule.*')
    ->whereBetween('date_from', [$startDate, $endDate])
    ->whereBetween('date_to', [$startDate, $endDate])
    ->get();

这只会选择date_fromdate_to在两个日期之间的记录。

Related SO postDocumentation

答案 1 :(得分:1)

尝试一下。

$start_date = date('Y-m-d H:i:s',strtotime('2019-03-20 09:00:00'));
$end_date = date('Y-m-d H:i:s',strtotime('2019-03-25 12:00:00'));

$vehicleSchedule=DB::table('vehicle_schedule')
->select('vehicle_schedule.*')
->where([['date_from','<=',$start_date],['date_to','>=',$end_date]])->orwhereBetween('date_from',array($start_date,$end_date))->orWhereBetween('date_to',array($start_date,$end_date))
->get();

答案 2 :(得分:1)

我强烈建议使用PHP Carbon来处理任何datetimetimestamp字段。

要将日期时间字段转换为Carbon,请在模型中使用它。

protected $dates = ['date_from','date_to'];

然后,将输入时间转换为控制器内部的Carbon

$date_from = Carbon::parse('2019-03-20 09:00:00');
$date_to = Carbon::parse('2019-03-25 12:00:00');

通过这种方式,查询将更短,更简洁,更高效。

$vehicleSchedule = DB::table('vehicle_schedule')
    ->where('date_from','>=',$date_from)
    ->where('date_to','<=',$date_to)
    ->get();