在30分钟内显示上午9点到下午5点+数组以划掉“不可用”时间

zlwx9yxi  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(524)

这篇文章是关于:laravel:disable“booked”times from time range的
我需要以30分钟为单位显示从上午9点到下午5点的时间列表。然后我需要排除一定的次数。例如,如果12:30pm-1:30pm不可用,我需要在时间上有一个删除线。
“不可用时间”需要在一个数组中,因为任何给定的一天都可能有多个。

@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

非常感谢你的帮助!

yc0p9oo0

yc0p9oo01#

感谢蒂亚戈的回答。我的完整代码如下所示:

@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
iyzzxitl

iyzzxitl2#

我不清楚代码中每个变量的确切含义,但我相信您要查找的内容如下:

@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

这个解决方案是可行的,但是有点慢,因为每次都要迭代bookings数组。一种更有效的方法是预先计算可用/不可用时间,然后进行渲染。

相关问题