我想在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。
答案 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
)