Час, Минута разницы в php

Я ищу решение в Php.

У меня есть общее время для задачи в формате чч:мм:сс. (дата не важна). и я ввожу каждое рабочее время также в формате чч:мм:сс. Теперь мне нужно узнать оставшиеся часы в формате чч:мм:сс.

Пример

16:00:00 — это назначенные часы для выполнения задачи. В разные даты один сотрудник работал 13:15:00. Теперь мне нужны остальные часы в формате 2:45:00.

Если дата прикреплена, мы можем сделать как

datetime1 = new DateTime('2014-02-11 04:04:26 AM');
$datetime2 = new DateTime('2014-02-11 05:36:56 AM');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%h')." Hours ".$interval->format('%i')." Minutes";

В моем случае даты нет. Есть ли в PHP какие-либо функции для поиска разницы в чч: мм: сс?


person Pradeep T P    schedule 15.06.2018    source источник
comment
Если нет даты, просто используйте любую дату (очевидно, одинаковую для обоих полей), и она покажет разницу в часах.   -  person dkasipovic    schedule 15.06.2018
comment
И если это не сработает, просто возьмите текущую дату :)   -  person Martijn    schedule 15.06.2018
comment
Я бы не стал работать с каким-либо объектом даты, если вы специально не работаете в формате UTC, поскольку любые неявные локальные часовые пояса заставят вас зациклиться на днях перехода на летнее время и/или вы будете напрасно бороться с часовыми поясами. Длительность не является отметкой времени и не должна рассматриваться таким образом.   -  person deceze♦    schedule 15.06.2018


Ответы (3)


Преобразуйте формат ЧЧ:ММ:СС в продолжительность в секундах, вычтите их, отформатируйте обратно в ЧЧ:ММ:СС:

function str_to_seconds($duration) {
    list($h, $m, $s) = explode(':', $duration);
    return $s + ($m * 60) + ($h * 3600);
}

function seconds_to_str($seconds) {
    return sprintf('%02d:%02d:%02d', $seconds / 3600, $seconds / 60 % 60, $seconds % 60);
}

echo seconds_to_str(str_to_seconds('16:00:00') - str_to_seconds('13:15:00'));
person deceze♦    schedule 15.06.2018

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

Что-то вроде этого:

function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
    $datetime1 = date_create($date_1);
    $datetime2 = date_create($date_2);

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

    return $interval->format($differenceFormat);

}
person Paco Gómez Capón    schedule 15.06.2018

Супер короткая версия

$secondsDiff = abs(strtotime("2014-02-11 04:04:26 AM") - strtotime("2014-02-11 05:36:56 AM"));
echo sprintf("%02d", floor($secondsDiff / 3600)) . ":" . sprintf("%02d", floor($secondsDiff / 60 %60)) . ":" . sprintf("%02d", ($secondsDiff % 60));
person Brain Foo Long    schedule 15.06.2018