在Laravel 5中查看日期范围之间的日期

时间:2015-07-12 19:44:08

标签: php laravel laravel-5 eloquent

我有一个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();

检查start列中任何属于$ start和$ end的日期。

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

我很难检查start表格中endbook列中的$ start和$ end日期变量是否出现。

4 个答案:

答案 0 :(得分:4)

// 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();

它将返回与$from-$till期间包含的start-end期间匹配的行:

    start                     end
      |------------------------|
         |----------------|
       $from            $till

答案 1 :(得分:2)

请尝试使用给定的代码,这将检查请求的日期时间是否已预订,如果预订了任何时间段,则它将返回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();

答案 2 :(得分:0)

我使用此代码解决了我的问题,在我的情况下,我有多个阻止日期,在这个日期中我们不允许用户注册新的预订,因此我们必须检查以下12个地方:

 addEvents = function () {
      let events = this.myEvents;
      let checkedEvents = [];
      let that = this;

      var content = this.$('#eventsBox');
      content.find('event-container').remove();

      this.$('#check-list input:checked').each(function() {
        checkedEvents.push(that.$(this).data('index'));
        let index = that.$(this).data('index');

        content.find('#events-content').append(`
          <div class="event-container">
            <div class="row">
              <div class="col-12">
                <table class="table" id="eventT">
                  <thead>
                    <tr>
                      <th scope="col">ID</th>
                    <tr>
                  </thead>
                  <tbody>
                    <tr>
                      <td>
                        ${events[index].id}
                        // How can i acces the sessions[index] to print all of them
                        ${events[index].sessions[index].id}
                      </td>
               ...

答案 3 :(得分:-1)

以下查询将为您提供开头和结尾均在$ start和$ end 之间的所有记录:

$users = DB::table('booked')
  ->where('start', '>=', $start)
  ->where('start', '<=', $end)
  ->where('end', '>=', $start)
  ->where('end', '<=', $end);