检查日期是否在Laravel 5中的日期范围之间

sha*_*nex 3 php laravel eloquent laravel-5

我有一个booked带有startend列的表作为日期戳;

我知道

$start = "2015-07-12 01:00:00";
$end = "2015-07-12 02:00:00";

$users = DB::table('booked')
                    ->whereBetween('start', [$start, $end])->get();
Run Code Online (Sandbox Code Playgroud)

检查start列中是否包含$ start和$ end内的任何日期。

我想要的实际上是另一种方式。

在检查$ start和$ end日期变量在表中的startend列中出现时遇到困难book

Er *_*wal 6

请在给定的代码下尝试,这将检查请求的日期时间是否已经预订,如果预订了任何时间段,则返回 1 否则返回 0 :

$start = $request->start_date; 
$end = $request->end_date; 
DB::table('booked')->where(function ($query) use ($start, $end) {

    $query->where(function ($q) use ($start, $end) {
        $q->where('start', '>=', $start)
           ->where('start', '<', $end);

    })->orWhere(function ($q) use ($start, $end) {
        $q->where('start', '<=', $start)
           ->where('end', '>', $end);

    })->orWhere(function ($q) use ($start, $end) {
        $q->where('end', '>', $start)
           ->where('end', '<=', $end);

    })->orWhere(function ($q) use ($start, $end) {
        $q->where('start', '>=', $start)
           ->where('end', '<=', $end);
    });

})->count();
Run Code Online (Sandbox Code Playgroud)


Jar*_*zyk 5

// make sure $from is before $till, because they are probably provided as input
$from = min($start, $end);
$till = max($start, $end);

// then simply
DB::table('booked')
     ->where('start', '<=', $from)
     ->where('end', '>=', $till)
     ->get();
Run Code Online (Sandbox Code Playgroud)

它将返回与$from-$tillperiod中包含的start-endperiod 相匹配的行:

    start                     end
      |------------------------|
         |----------------|
       $from            $till
Run Code Online (Sandbox Code Playgroud)