【问题标题】:PHP - Find next available time slotPHP - 找到下一个可用的时间段
【发布时间】:2010-12-13 12:57:36
【问题描述】:

我正在寻求帮助以编写脚本以查找下一个可用时间段。

例如:A 想要预约,每天的可用时间段是上午 9 点、中午 12 点、下午 4 点、下午 6 点、晚上 9 点

所以,我需要检查现有数据并比较为其他约会预订的时间段,然后找到下一个可用的时间段。

$apts = array(
        'Person 1' => '1/1/09-9:00',
        'Person 2' => '1/1/09-12:00',
        'Person 3' => '1/1/09-18:00',
        'Person 4' => '1/1/09-21:00'
        );

所以,我需要为 A 人找到下一个针对 $apts 的时间段,它应该是下午 4 点(1/1/09-16:00)。然后出现了人 B,他/她的下一个时间段应该是 '1/2/09-9:00',因为 1/1/09 没有更多时间段,所以转到第二天早上 9 点。

从那时起? 谢谢!!

【问题讨论】:

  • 你如何指定可能的时间段(即考虑到假期等)?即您是否有另一个包含该信息的数组,或者您打算将其编码?
  • 编码即可。不考虑任何特殊场合或任何事情。
  • 听起来是一个很容易被数据库解决的问题。
  • $apts 是一个包含当年所有可能约会的巨大数组,还是每天从数据库生成?

标签: php date time comparison


【解决方案1】:

从语义上讲,数据库是最好的解决方案。如果您想使用包含 timeperson_id 列的表,其中 time 被编码为 UNIX 时间(虽然很容易适应其他格式),您可能只想运行:

SELECT time FROM table WHERE person_id = 0 AND time > 1234567890 LIMIT 1;

保持原来的仅限 PHP 的解决方案,一个语义上合理的解决方案可能只是运行一个 while 循环来搜索下一个可用的时间段。

$timeslot = $desired_timeslot;
while(in_array($timeslot, $apts)) {
    $timeslot = get_next_timeslot($timeslot);
}
return $timeslot;

当然,您必须定义函数 get_next_timeslot() 以适应您的编码/组织方法。

【讨论】:

  • 不要在您的数据库中使用 unix 时间戳,这会使运行正常查询变得困难。如果您想选择适当的日期时间作为 unix 时间戳,请使用 UNIX_TIMESTAMP(column)
猜你喜欢
  • 2012-11-05
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 2020-06-22
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多