2013-06-02 2 views
4

У меня есть два раза - Для например - текущее время - 08:24 и дата 02/01/2013 в формате dd/mm/yyyy , и у меня есть другой раз в 13:46 и дата - 31/12/2012. Итак, как я могу рассчитать разницу между 2 раза в часах с помощью PHP. (т.е. 42,63 часа) Заранее спасибо.Рассчитать разницу между 2 раза в часах в PHP

+0

Термин, который вы ищете, это «арифметика даты». –

ответ

4

Преобразуйте их оба в значения метки времени, а затем вычтите, чтобы получить разницу в секундах.

$ts1 = strtotime(str_replace('/', '-', '02/01/2013 08:24')); 
$ts2 = strtotime(str_replace('/', '-', '31/12/2012 13:46')); 
$diff = abs($ts1 - $ts2)/3600; 
+0

Отредактировано: strtotime анализирует как m/d/y или dmy, поэтому преобразован/в - до разбора – jcsanyi

+0

это дает разницу, но не дает мне, является ли разница положительной или отрицательной. –

+0

Вы можете просто удалить вызов abs() если вам нужно сохранить знак различия. '($ ts1 - $ ts2)/3600' – jcsanyi

1

Если у вас есть даты как временные метки (при необходимости используйте strtotime), то просто вычтите их, по желанию возьмите абсолютное значение, затем разделите на 3600 (количество секунд в час). Easy^_^

4

Другой способ - использовать классы, связанные с датой PHP. В приведенном ниже примере используется DateTime::diff(), чтобы получить объект DateInterval ($interval). Затем он использует свойства интервала для достижения общего количества часов в интервале.

$a = DateTime::createFromFormat('H:i d/m/Y', '08:24 02/01/2013'); 
$b = DateTime::createFromFormat('H:i d/m/Y', '13:46 31/12/2012'); 

$interval = $a->diff($b); 
$hours = ($interval->days * 24) + $interval->h 
      + ($interval->i/60) + ($interval->s/3600); 

var_dump($hours); // float(42.633333333333) 
1

Я получил простое решение, попробуйте этот один -

echo getTimeDiff("10:30","11:10"); 

function getTimeDiff($dtime,$atime) 
    { 
     $nextDay = $dtime>$atime?1:0; 
     $dep = explode(':',$dtime); 
     $arr = explode(':',$atime); 
     $diff = abs(mktime($dep[0],$dep[1],0,date('n'),date('j'),date('y'))-mktime($arr[0],$arr[1],0,date('n'),date('j')+$nextDay,date('y'))); 
     $hours = floor($diff/(60*60)); 
     $mins = floor(($diff-($hours*60*60))/(60)); 
     $secs = floor(($diff-(($hours*60*60)+($mins*60)))); 
     if(strlen($hours)<2){$hours="0".$hours;} 
     if(strlen($mins)<2){$mins="0".$mins;} 
     if(strlen($secs)<2){$secs="0".$secs;} 
     return $hours.':'.$mins.':'.$secs; 
    } 
0

Я думаю, что следующий код полезен, чтобы получить представление о том, как вычислить разницу во времени с помощью PHP

function date_diff($date_1 , $date_2 , $format) { 
    $datetime1 = date_create($date_1); 
    $datetime2 = date_create($date_2); 

    $diff = date_diff($datetime1, $datetime2); 

    return $diff->format($format); 
} 

Вышеуказанная функция полезна для вычисления разницы между двумя иными датами. Даты даются как аргументы с выходным форматом.

выходного формата, приведен ниже:

// '% г Год% м Месяц% d день% ч% часы я минутные% S Секунда' => 1 год 3 месяца 14 дня 11 часов 49 мин 36 Секунд // '% y Год% m Месяц% d День' => 1 год 3 месяц 14 дней // '% m Месяц% d День' => 3 Месяц 14 День // '% d День% h Часы '=> 14 день 11 часов //'% d День '=> 14 дней //'% h Hours% i Minute% s Seconds '=> 11 Hours 49 Minute 36 Seconds //'% i Minute% s Секунд '=> 49 минут 36 секунд //'% h Часы => 11 часов // '% a Дни

Смежные вопросы