php - получить разницу во времени

Я использую php-скрипт для расчета разницы во времени между двумя заданными временами, который вы можете найти здесь: http://www.gidnetwork.com/b-16.html

Я только что выяснил, что в скрипте есть ошибка: когда время начала до полуночи [скажем, 22:30], а время окончания после полуночи [скажем, 00:30], функция не будет работать.

Вы можете помочь мне исправить это? Это используемый скрипт:

    function get_time_difference( $start, $end )
{
    $uts['start']      =    strtotime( $start );
    $uts['end']        =    strtotime( $end );
    if( $uts['start']!==-1 && $uts['end']!==-1 )
    {
        if( $uts['end'] >= $uts['start'] )
        {
            $diff    =    $uts['end'] - $uts['start'];
            if( $days=intval((floor($diff/86400))) )
                $diff = $diff % 86400;
            if( $hours=intval((floor($diff/3600))) )
                $diff = $diff % 3600;
            if( $minutes=intval((floor($diff/60))) )
                $diff = $diff % 60;
            $diff    =    intval( $diff );            
            return( array('days'=>$days, 'hours'=>$hours, 'minutes'=>$minutes, 'seconds'=>$diff) );
        }
        else
        {
            trigger_error( "Ending date/time is earlier than the start date/time", E_USER_WARNING );
        }
    }
    else
    {
        trigger_error( "Invalid date/time data detected", E_USER_WARNING );
    }
    return( false );
}

person laarsk    schedule 18.10.2011    source источник
comment
Что вы имеете в виду под не будет работать? Что просходит?   -  person Pekka    schedule 18.10.2011
comment
Ну, он ничего не выводит, когда я ввожу: 22:30 как $start и 00:30 как $end...   -  person laarsk    schedule 18.10.2011
comment
Я только что понял, что пропускал только часы и минуты, забыл добавить дату... :P Извините, теперь это работает :)   -  person laarsk    schedule 19.10.2011


Ответы (1)


Почему бы вместо этого не использовать функцию getdate()? Тогда вы будете уверены, что ваш код работает, что бы вы ни имели в виду, говоря, что он «не будет работать».

function get_time_difference($start, $end)
{
    $uts['start']      =    strtotime($start);
    $uts['end']        =    strtotime($end);
    if ($uts['start'] !==-1 && $uts['end'] !==-1)
    {
        if( $uts['end'] >= $uts['start'] )
        {     
            return getdate($uts['end'] - $uts['start']);
        }
        else
        {
            trigger_error("Ending date/time is earlier than the start date/time", E_USER_WARNING);
        }
    }
    else
    {
        trigger_error("Invalid date/time data detected", E_USER_WARNING);
    }
    return(false);
}
person matino    schedule 18.10.2011
comment
Спасибо, хотя я уже исправил неработающую часть в моей предыдущей упомянутой функции: я также передал дату, и теперь она работает нормально :) - person laarsk; 19.10.2011