我正试图弄清楚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
)
)
要比较两个日期/时间,必须首先将它们转换为'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 />';
}