PHP日历:下一个可用时间段

PHP日历:下一个可用时间段,php,mysql,datetime,calendar,Php,Mysql,Datetime,Calendar,上下文: 我正在构建一个webapp,它主要基于日历的调度功能。我选择fullcalendar.io来显示事件,因此创建了一个相当简单的mysql结构: id (autoincrement) patient_id (the users id) start (datetime, e.g. 2016-04-06 14:30:00) end (datetime) 现在我试图解决的挑战是找到给定一天的可用时间段。。。 也就是说,还有一些变量使其更加复杂: session_length(int)是用户

上下文:

我正在构建一个webapp,它主要基于日历的调度功能。我选择fullcalendar.io来显示事件,因此创建了一个相当简单的mysql结构:

id (autoincrement)
patient_id (the users id)
start (datetime, e.g. 2016-04-06 14:30:00)
end (datetime)
现在我试图解决的挑战是找到给定一天的可用时间段。。。 也就是说,还有一些变量使其更加复杂:

  • session_length(int)是用户设置给定的持续时间(以分钟为单位)
  • session_interval(int)是两个会话之间的间隔
因此,如果
会话长度=45,会话间隔=15,我们将寻找75分钟的时隙。
如果一个时隙是75的倍数,我们需要将该时隙添加到
$available\u timeslots array()

我的尝试:

当然,将当天计划的事件放入一个名为
events
的数组中:

Array
(
    [0] = Array
        (
            [title] = Client 24
            [start] = 2016-04-06 21:15:00
            [end] = 2016-04-06 22:30:00
        )

    [1] = Array
        (
            [title] = client 1
            [start] = 2016-04-06 16:40:00
            [end] = 2016-04-06 17:55:00
        )

)
以及各种基于更具创造性而非有效代码的循环,比如通过1440分钟(=1天)的循环测试哪些循环与事件重叠。这似乎是难以置信的沉重,但这是我迄今为止最好的解决方案

如何使用可用插槽:

我们的想法是使用以下html模板在模式中显示它们,其中包含10个(或20个)下一个可用日期的列表:

<ul class="available_dates">
    <li class="date" data-start="_TIMESLOT_STARTDATE_" data-end="_TIMESLOT_ENDDATE">Monday - 06/04/2016 09:30</li>
    <li class="date" data-start="_TIMESLOT_STARTDATE_" data-end="_TIMESLOT_ENDDATE">Monday - 06/04/2016 10:45</li>
</ul>
  • 星期一-2016年4月6日09:30
  • 星期一-2016年4月6日10:45
任何建议都是受欢迎的,我尝试了数千种方法,但找不到可靠的轻量级解决方案


谢谢大家的帮助

一个建议是:不要使用表中的开始和结束时间,可以使用开始时间和持续时间。我相信,当您取出所有计划的事件并运行循环检查冲突时,这将使计算更加容易。1)获取持续时间没有那么长。。。2)我不认为这会有什么帮助-你能详细说明一下吗?