需要有关如何实现此问题的逻辑

时间:2019-05-29 20:21:55

标签: php codeigniter

我想在PHP CodeIgniter中实现此逻辑。

我有一个从00:00到23:30的间隔30分钟的入住时间选项。例如,时间可以是00:00,00:30、01:00、01:30、02:00、02:30,03:00、03:30 ..... 23:30。

由于2小时预订窗口,系统将显示数量有限的入住时间选项,因此,客户无法看到我们所有的入住时间选项。它将根据系统的当前时间工作。从当前时间到接下来的2个小时,客户将从最近的入住时间选项中看到入住时间选项。例如,当前时间是00:50。最近的入住时间选项是01:00,而从01:00开始的2小时是03:00。因此,客户只会看到以下入住时间选项,这是一天中任何时候的5个选项; 01:00,01:30,02:00,02:30,03:00等

我似乎无法将其翻译成PHP。

1 个答案:

答案 0 :(得分:0)

因此,您基本上需要将当前时间解析为小时和分钟,然后使用DateInterval到最近的(下一个/前进)半小时或小时。这成为选项1。从那里产生一个问题,即从第一个可用选项开始等于2小时的下四个选项。我们使用for循环进行此操作,并在每次迭代中添加30m,直到完成所有选项为止。

<?php

function check_in_options($time) {

    $dt = new DateTime($time);

    $minutes = $dt->format('i');
    $hour = $dt->format('H');

    $interval = $minutes >= 30 ? 60 - $minutes : 30 - $minutes;
    $dt->add(new DateInterval("PT{$interval}M"));

    $options[] = $dt->format('H:i');

    for ($x = 1; $x <= 4; $x++) {
        $options[] = $dt->add(new DateInterval("PT30M"))->format('H:i');
    }

    return $options;

}

$time = '00:50';

$options = check_in_options($time);

echo '<pre>';
print_r($options);

结果:

Array
(
    [0] => 01:00
    [1] => 01:30
    [2] => 02:00
    [3] => 02:30
    [4] => 03:00
)