以30分钟的块数和阵列显示上午9点至下午5点,以消除“不可用”的时间

时间:2018-07-22 19:09:10

标签: php mysql laravel laravel-blade

此帖子参考:Laravel: Disable "Booked" times from time range

我需要在30分钟内显示从上午9点到下午5点的时间列表。然后,我需要屏蔽一定时间。例如,如果无法使用12:30 pm-1:30 pm,那么我需要在时间上进行删除线。

“不可用时间”必须排列在数组中,因为在给定的一天中可能有多个时间。

@php
$bookings_array = array(
    array(
        'start_time' => "09:00:00",
        'end_time'   => "10:00:00"
    )
)
@endphp

@for ($i=$start_time;$i<=$end_time;$i = $i + 30*60)
    @if($i >= strtotime($empbooking->start_time) && $i <= strtotime($empbooking->end_time))
        @foreach($employee_booking as $booking)
            Booking [unavailable] {{ $booking->start_time }} - {{ $booking->end_time }} ({{ $booking->title }}) <br>
        @endforeach
    @endif
    {{ date('H:i a', $i) }} [available] <br>
@endfor

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我无法完全理解代码中每个变量的含义,但是我相信您正在寻找的东西是这样的:

@php
    $bookings_array = array(
        (object)array(
            'start_time' => "12:30:00",
            'end_time'   => "13:30:00"
        ),
        (object)array(
            'start_time' => "16:30:00",
            'end_time'   => "18:00:00"
        )
    );

    $start_time = strtotime('09:00:00');
    $end_time = strtotime('19:00:00');
@endphp

@for ($i=$start_time;$i<=$end_time;$i = $i + 30*60)
    @foreach ($bookings_array as $booking)
        @if (strtotime($booking->start_time) <= $i && strtotime($booking->end_time) >= $i)
            {{ date('H:i a', $i) }} [unavailable] <br>
            @continue(2)
        @endif
    @endforeach
    {{ date('H:i a', $i) }} [available] <br>
@endfor

这种解决方案虽然可行,但速度较慢,因为您每次都需要遍历预订数组。一种更有效的方法是预先计算可用/不可用时间,然后再计算。

答案 1 :(得分:0)

感谢Thiago的回答。我下面的完整代码可以按我的意愿工作:

@php
            $employee_booking = $bookings->where('employee_id',$employeedetails->id)->where('start_date', date('Y-m-d', strtotime($_GET['booking_date'])))->all();
            @endphp
            @for ($i=$start_time;$i<=$end_time;$i = $i + 30*60)
                @foreach ($employee_booking as $booking)
                    @if (strtotime($booking->start_time) <= $i && strtotime($booking->end_time) >= $i)
                        <div>
                          <input type="radio" id="control_{{ date('H:i a',$i) }}" name="booking_time" value="{{ date('H:i a',$i) }}" disabled="disabled">
                          <label for="control_{{ date('H:i a',$i) }}">
                            <h2>{{ date('H:i a', $i) }}</h2> <!-- TAKEN DATE -->
                          </label>
                        </div>
                        @continue(2)
                    @endif
                @endforeach
                <div>
                  <input type="radio" id="control_{{ date('H:i a',$i) }}" name="booking_time" value="{{ date('H:i a',$i) }}">
                  <label for="control_{{ date('H:i a',$i) }}">
                    <h2>{{ date('H:i a',$i) }}</h2> <!-- AVAILABLE DATE -->
                  </label>
                </div>
            @endfor