PHP:检查数组中的重叠时间范围


PHP : Check for overlapping time range in an array?

我正试图弄清楚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 />';
}