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

时间:2015-12-12 08:21:17

标签: php arrays

我想弄清楚如果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
        )

)

1 个答案:

答案 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 />';
}