保留时间(日历)会返回错误值


reserved time (calendar) gives back bad values.

我在从数据库中获取预订日期的数据时遇到问题。

预订时间示例为:08:00:00 和 10:00:00,

我想显示免费时间,即 13:00:00 和 15:00:00

但它给了我 10:00 13:00 15:00 08:00 10:00

15:00 作为空闲时间。

$ch = $db->execute("SELECT `time` FROM `calendar` WHERE `date` = '2015-01-08'");
while(list($time) = $db->fetch($ch)) {

if($time != "08:00:00") { echo"<option value='"08:00'">08:00</option>"; }
if($time != "10:00:00") { echo"<option value='"10:00'">10:00</option>"; }
if($time != "13:00:00") { echo"<option value='"13:00'">13:00</option>"; }
if($time != "15:00:00") { echo"<option value='"15:00'">15:00</option>"; }
}

这可能是逻辑问题吗?
看起来您的查询会返回该日期的所有时间。
因此,如果它返回的第一个值是08:00:00它将在所有其他 3 个 if 上echo

 echo"<option value='"10:00'">10:00</option>";
 echo"<option value='"13:00'">13:00</option>";
 echo"<option value='"15:00'">15:00</option>";

但它将对所有返回的times执行相同的逻辑,因此您会看到重复的时间。

您可以尝试将所有options添加到数组中。然后,在循环遍历返回值时,如果该项等于返回值,则从数组中删除该项。
这样你最终只得到 free times .

这是一些伪代码,可以为您提供可能的解决方案的想法

timeArray = [08:00, 10:00, 13:00, 15:00]

$ch = $db->execute("SELECT `time` FROM `calendar` WHERE `date` = '2015-01-08'");
while(list($time) = $db->fetch($ch)) {
    //If item is found, remove it from 'free time array'
    found = find_in_array(timeArray, returnedTime)
    if (found > 0) {
        remove_item_from_array( timeArray, found )
    }
}

timeArray 现在应该只包含 ( 13:00, 15:00 )