Рассчитать разницу между 2 раза в часах в PHP

У меня есть два раза - Например, текущее время - 08:24, а дата - 01.02.2013 в формате дд / мм / гггг, а другое время - 13:46, а дата - 31/12/2012. Итак, как я могу рассчитать разницу между 2 часами, используя PHP. (т.е. 42,63 часа) Заранее спасибо.


person Deval Khandelwal    schedule 02.06.2013    source источник
comment
Термин, который вы ищете, - это арифметика даты.   -  person Andy Lester    schedule 02.06.2013


Ответы (7)


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

$ts1 = strtotime(str_replace('/', '-', '02/01/2013 08:24'));
$ts2 = strtotime(str_replace('/', '-', '31/12/2012 13:46'));
$diff = abs($ts1 - $ts2) / 3600;
person jcsanyi    schedule 02.06.2013
comment
Отредактировано: strtotime анализирует как m/d/y или d-my-y, поэтому преобразует / в - перед разбором - person jcsanyi; 02.06.2013
comment
это дает разницу, но не дает мне, является ли разница положительной или отрицательной - person Bhavik Joshi; 03.04.2015
comment
Вы можете просто удалить вызов abs(), если вам нужно сохранить знак разницы. ($ts1 - $ts2) / 3600 - person jcsanyi; 10.04.2015
comment
да, это была моя ошибка, я не заметил этого - person Bhavik Joshi; 13.04.2015

Другой способ — использовать классы 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)
person salathe    schedule 02.06.2013

У меня есть простое решение, попробуйте это -

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;
    }
person Pooja Yadav    schedule 31.01.2017

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

person Niet the Dark Absol    schedule 02.06.2013

Я думаю, что следующий код полезен, чтобы получить представление о том, как рассчитать разницу во времени с помощью 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);
}

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

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

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

person Codemaker    schedule 28.02.2018

Просто поместите это сюда для всех, кому нужно найти разницу между двумя датами/отметками времени в Hours, Minutes 'И' Seconds!!

$futureDate_raw = '12/13/2018'; // This is your finish date.
$fdate = strtotime($futureDate_raw);

$hours   = (($fdate - time()) / 3600;
$mins    = (($fdate - time()) % 3600) / 60;
$seconds = ((($fdate- time()) % 3600) % 60);
person Mohd Abdul Mujib    schedule 25.11.2018

Я обнаружил, что это самый простой способ найти разницу во времени, он всегда работает для меня.

$timestamp1 = strtotime(date('Y-m-d H:i'));
$timestamp2 = strtotime("2020-04-05 18:00");

  $diff = abs($timestamp2 - $timestamp1)/(60*60);
echo $diff;
person Arati    schedule 03.04.2020