获取两个日期时间段之间的数据库搜索结果
Get database search results between two date time period
在我的数据库中,有一个名为 vehicle_schedule 的 table,所有的车辆时刻表都存储在那里。在 table 中,有两列名称为 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"]);
我希望所有车辆的时间表都在给定的范围内。但它只得到日期值之间的车辆时刻表。当我检查时间限制时,它无法正常工作。
试试这个。
$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();
我强烈建议使用 PHP Carbon
来处理任何 datetime
或 timestamp
字段。
要将日期时间字段转换为 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();
您可以使用 Laravel whereBetween
为此:
$vehicleSchedule=DB::table('vehicle_schedule')
->select('vehicle_schedule.*')
->whereBetween('date_from', [$startDate, $endDate])
->whereBetween('date_to', [$startDate, $endDate])
->get();
这只会 select 记录其中 date_from
和 date_to
在两个日期之间的记录。
在我的数据库中,有一个名为 vehicle_schedule 的 table,所有的车辆时刻表都存储在那里。在 table 中,有两列名称为 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"]);
我希望所有车辆的时间表都在给定的范围内。但它只得到日期值之间的车辆时刻表。当我检查时间限制时,它无法正常工作。
试试这个。
$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();
我强烈建议使用 PHP Carbon
来处理任何 datetime
或 timestamp
字段。
要将日期时间字段转换为 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();
您可以使用 Laravel whereBetween
为此:
$vehicleSchedule=DB::table('vehicle_schedule')
->select('vehicle_schedule.*')
->whereBetween('date_from', [$startDate, $endDate])
->whereBetween('date_to', [$startDate, $endDate])
->get();
这只会 select 记录其中 date_from
和 date_to
在两个日期之间的记录。