我想弄清楚如果PHP中的两个时间范围在同一个数组中重叠。如果时间范围嵌套在另一个时间范围的开始和结束时间之间,则它不匹配。
Array
(
[1] => Array
(
[start_time] => 01:00
[end_time] => 04:00
)
[2] => Array
(
[start_time] => 05:00
[end_time] => 08:00
)
[3] => Array
(
[start_time] => 06:00
[end_time] => 12:00
)
[4] => Array
(
[start_time] => 13:00
[end_time] => 24:00
)
)
答案 0 :(得分:0)
要比较两个日期/时间,您必须先将它们转换为\DateTime
个对象。
然后,您必须与<
和>
运算符进行简单比较。
但你想要达到的目的不是获得日期/时间,而只是比较几小时。
所以,因为它们是简单的字符串,所以你应该先用数字转换它们。
你能做的最好的事情就是把它们全部转换成几分钟,然后比较它们。
所以,这样的事情应该有效:
function convertFromHoursToMinutes($string)
{
// Separate hours from minutes
$split = explode(':', $string);
// Transform hours into minutes
$hoursToMinutes = $split[0] * 60;
$total = $hoursToMinutes + (int)$split[1];
return $total;
}
$ranges = [
[
'start_time' => '01:00',
'end_time' => '04:00'
],
[
'start_time' => '05:00',
'end_time' => '08:00'
],
[
'start_time' => '06:00',
'end_time' => '12:00'
],
[
'start_time' => '13:00',
'end_time' => '24:00'
]
];
foreach ($ranges as $range)
{
// Convert values into minutes
$start_time = convertFromHoursToMinutes($range['start_time']);
$end_time = convertFromHoursToMinutes($range['end_time']);
// Do the comparison
if ($start_time > $end_time)
{
echo 'Start > end';
} else {
echo 'Start < end';
}
echo '<hr />';
}