我有一个似乎很难解决的问题所以我希望有人能为我找到一个好的解决方案:)
我有一个PHP程序,其中包含酒店许多会议室的预订列表。我需要计算一天中至少有1个会议室正在使用的时间。
这是一个例子:
Room 1: 10h 00 to 13h 00
Room 2: 11h 00 to 14h 00
Room 3: 15h 00 to 16h 00
有了这些数字,我需要计算酒店在5小时内使用(10h到14h和15h到16h)。
最后,这告诉我酒店必须支付多少小时来检查房间,以防有人遇到问题。
如果你没有可以帮助我的库,算法可能是一个好的开始。
答案 0 :(得分:2)
算法大纲:
<?php
// assuming hh:mm format for all the dates //
$intervals = array(
array(
'start' => '15:30',
'end' => '16:00',
),
array(
'start' => '10:00',
'end' => '13:00',
),
array(
'start' => '15:00',
'end' => '16:09',
),
array(
'start' => '11:00',
'end' => '14:00',
),
);
// 1. sort the intervals by start date //
function mySortIntervals($a, $b){
return $a > $b;
}
usort($intervals, 'mySortIntervals');
// 2. merge adjoining intervals //
$active = 0;
$current = 1;
$length = count($intervals);
while($current < $length){
if($intervals[ $current ]['start'] <= $intervals[ $active ]['end']){
$intervals[ $active ]['end'] = max($intervals[ $active ]['end'], $intervals[ $current ]['end']);
unset($intervals[ $current ]);
}
else{
$active = $current;
}
$current++;
}
// 3. cout the total time //
$time = 0;
foreach($intervals as $interval){
$time += strtotime($interval['end']) - strtotime($interval['start']);
}
// output //
echo str_pad((int) ($time/60/60), 2, '0', STR_PAD_LEFT).':';
echo str_pad((int) (($time/60)%60), 2, '0', STR_PAD_LEFT);
?>
答案 1 :(得分:0)
首先,您需要定义间隔或时间跨度,例如每15分钟。 为什么这个?因为你需要控制因时间之前完成的房间造成的间隙,或者出于其他原因。
时间跨度不能超过15分钟。(时间就是金钱)。
要订购房间,只需选择小时(00至23)和季度(00; 15; 30; 45;)
对于ISP业务来说,这对我很有帮助。我觉得酒店并没有什么不同。因为时间跨度的想法是一样的。
但是,如果你根本不想编写代码,你当然可以寻找一些课程。