Laravel Carbon,如何格式化比较日期时间?

时间:2016-12-06 18:39:24

标签: php laravel datetime php-carbon

我正在预订应用程序,我从用户处获得开始和结束(日期时间)并检查此期间(开始和结束)是否与数据库列相交(开始和结束)所以我需要比较Input['start']Input['end']与数据库,所以我使用了Carbon::create($inputstart)->between($start ,$end));,但它总是给错误"意外的数据" &安培; "追踪数据"

以下是检查和存储输入的控制器方法

public function store(Request $request,$yard,$court)
{
    $start =$request->input("start");
    $end =$request->input("end");
    $courtCalendar = CalendarEvent::where('court_id',$court)->get();
    $start= Carbon::parse( $start);
    $end = Carbon::parse($end);
    foreach ($courtCalendar as $booked) {    
       $bend= Carbon::parse($booked->end);  
       $bstart= Carbon::parse($booked->start);
       dd(Carbon::create($end)->between($bstart ,$bend));
        if (!Carbon::create($start)->between($bstart ,$bend)){
            if (!Carbon::create($end)->between($bstart ,$bend)) {
    $calendar_event = new CalendarEvent();
    $calendar_event->user_id          = Auth::user()->id;   
    $calendar_event->court_id         = $court; 
    $calendar_event->title            = $request->input("title");
    $calendar_event->start            = $start;
    $calendar_event->end              = $end;
    $calendar_event->status           = 0;
    $calendar_event->save();
    return redirect()->back()
    ->with(['header'=>'Success!','class' =>'alert alert-success','message'=> 'booked successfully.',
        'calendar'=>$calendar_event]);
            }else
            {return redirect()->back()
                ->with(['header'=>'Warning!','class' =>'alert alert-warning','message'=> 'cannot book at this time end time is occupied']);}
        }else
            {return redirect()->back()
                ->with(['header'=>'Warning!','class' =>'alert alert-warning','message'=> 'cannot book at this time start time is occupied']);}
    }
}

我还将模型中的数据库列声明为日期

protected $dates = ['start', 'end'];

如何从HTML表单和数据库传递日期时间格式" datetime"所以Carbon可以做到"之间的#34;比较?

1 个答案:

答案 0 :(得分:5)

看起来您已经使用行

为$ end变量创建了Carbon实例
$end = Carbon::parse($end);

所以,如果你想确定$ end是否在$ bstart和$ bend之间,那么你希望你的行看起来像这样

$end->between($bstart, $bend);

如果这不起作用,请dd($end)以及dd($bstart)dd($bend)以确保它们都是碳对象。