Php 如何正确处理日期和时间?

Php 如何正确处理日期和时间?,php,laravel,laravel-5,Php,Laravel,Laravel 5,在我的型号培训中我有一段录音 培训日期:2019年9月15日|开始时间:18:00 |结束时间:20:00 |摩托车:000001 然后,如果我在2019年9月1日至2019年9月15日的14:00至16:00将摩托车000001放入Revision 现在,如果我想在我的表格Training中添加录音,例如: 培训日期:2019年9月15日|开始时间:08:00 |结束时间:10:00 |摩托车:000001 通常情况下,摩托车正在修改,但我可以在这里添加???如何创建阻塞 pub

在我的型号
培训中
我有一段录音

培训日期:2019年9月15日|开始时间:18:00 |结束时间:20:00 |摩托车:000001

然后,如果我在2019年9月1日至2019年9月15日的14:00至16:00将摩托车
000001
放入
Revision

现在,如果我想在我的表格
Training
中添加录音,例如:

培训日期:2019年9月15日|开始时间:08:00 |结束时间:10:00 |摩托车:000001

通常情况下,摩托车正在修改,但我可以在这里添加???如何创建阻塞

    public function store(Request $request)
    {
        $request->validate([
                'date_seance' => 'required',
                'hour_start' => 'required',
                'hour_end' => 'required',
                'fk_motorbike' => 'required',
                'fk_former' => 'required',
                'fk_student' => 'required',
                'fk_typeseance' => 'required'


        ]);


       $date_seance = Carbon::parse($request->get('date_seance'))->format('Y-m-d');
       $hour_start = $request->get('hour_start'); 
       $hour_end = $request->get('hour_end'); 
       $fk_motorbike = $request->get('fk_motorbike');
       $fk_student = $request->get('fk_student');
       $fk_former = $request->get('fk_former');
       $fk_typeseance = $request->get('fk_typeseance');


       $conflictTraining = Training::where('fk_motorbike', $request->get('fk_motorbike')) 
       ->whereDate('date_seance', "=" , Carbon::parse($date_seance)) 
       ->where('hour_start', "<=" , $request->get('hour_start')) 
       ->where('hour_end', ">=" , $request->get('hour_end'))
       ->where('fk_former', $request->get('fk_former'))
       ->first();

      $conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
       ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
       ->where('hour_start', "<=" , $request->get('hour_start')) 
       ->where('hour_end', ">=" , $request->get('hour_end'))
       ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
       ->first();

      if(isset($conflictRevision)) {
            return redirect()->route('trainings.index')
             ->with('error', 'revision');
        }

       if(isset($conflictTraining)){
            return redirect()->route('trainings.index')
             ->with('error', 'training');
        }

      else{
            Training::create($request->all());
                return redirect()->route('trainings.index')
                    ->with('success', 'Add');
        }



    }
公共函数存储(请求$Request)
{
$request->validate([
“date\u-seance”=>“required”,
“小时开始”=>“必需”,
“小时结束”=>“必需”,
“fk_摩托车”=>“必需”,
“fk_前”=>“必需”,
“fk_学生”=>“必选”,
“fk_typeseance”=>“必需”
]);
$date\u-seance=Carbon::parse($request->get('date\u-seance'))->format('Y-m-d');
$hour\u start=$request->get('hour\u start');
$hour\u end=$request->get('hour\u end');
$fk_摩托车=$request->get('fk_摩托车');
$fk_学生=$request->get('fk_学生');
$fk_-former=$request->get('fk_-former');
$fk_typeseance=$request->get('fk_typeseance');
$conflictTraining=Training::where('fk_摩托车',$request->get('fk_摩托车'))
->whereDate('date\u-seance',“=”,Carbon::parse($date\u-seance))
->其中('hour\u start',“=”,$request->get('hour\u end'))
->其中('fk_-former',$request->get('fk_-former'))
->第一个();
$conflictRevision=Revision::where('fk_摩托车',$fk_摩托车)
->whereDate('date\u revision\u start',“=”,$request->get('hour\u end'))
->whereDate('date\u revision\u end',“=”,$request->get('hour\u end'))

->whereDate('date\u revision\u end',“我不确定错误是什么。您编写的代码似乎正确地让修订版的自行车进入新的培训。在这一行中:

$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
   ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
   ->where('hour_start', "<=" , $request->get('hour_start')) 
   ->where('hour_end', ">=" , $request->get('hour_end'))
   ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
   ->first();
$conflictRevision=Revision::where('fk_motorbike',$fk_motorbike)
->whereDate('date\u revision\u start',“=”,$request->get('hour\u end'))
->whereDate('date\u revision\u end',“=”,Carbon::parse($date\u seance))
->第一个();
如果检查会产生冲突,因为自行车在9月15日进行了修订,而您希望在9月15日进行另一次培训。但是!您也在查询中包含了时间。您和我都知道,自行车在9月15日全天都在修订中。但是您进一步限制了查询说“请在9月15日告诉我所有正在修订的自行车,并且只告诉我它们是否在08:00和10:00之间进行了修订”。这不会生成正在修订的自行车,因为查询要求在当天和当天的时间范围内进行自行车修订

解决方案1:

您可以在查询中保留时间,这将转化为我们上面所说的内容-即使当天正在修改,也可以预订自行车进行训练,只要它不在这些时间内

解决方案2:


或者,您可以从查询中删除时间,如上面我的第二个代码所示。这将转换为“自行车在当天的任何时候都在修订中,如果是,请阻止培训。”"从现实世界的流程来看,第二个似乎更符合逻辑。

小时开始是一个字符串?还是一个日期时间?我认为最好的方法就是这样做。但是要做一个日期时间。非常感谢你的解释。我还读到,我们可以再添加两个变量,开始时间和停止时间。如果一天,你有15分钟,这不是完整的如果我想了解它是如何工作的,我找不到法语文档。否则,没关系,我将保留解决方案2.:-)不幸的是,这不是你在文档中可以找到的东西。这是纯粹的程序逻辑。你的代码是正确的——它完全按照你的要求去做。但是,你所要求的逻辑并不符合你的要求。你要么需要允许在修订时进行多次培训,要么不进行培训——这取决于你自己。最难理解的是,你不能同时拥有这两个时间段;只有一个或另一个会在你如何约束这两个方面起作用。我会听从你的建议。:)谢谢。有几个人使用开始时间和停止时间,你知道怎么做吗?我被困在控制器培训的副本中。当然-我坚持回答。诀窍是保持它为整数。
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
   ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
   ->where('hour_start', "<=" , $request->get('hour_start')) 
   ->where('hour_end', ">=" , $request->get('hour_end'))
   ->whereDate('date_revision_end', "<=" ,  Carbon::parse($date_seance))
   ->first();
$conflictRevision = Revision::where('fk_motorbike', $fk_motorbike)
   ->whereDate('date_revision_start', "<=" ,  Carbon::parse($date_seance)) 
   ->whereDate('date_revision_end', ">=" ,  Carbon::parse($date_seance))
   ->first();