Как получить разницу между временами?

Мне нужно сделать сколько прошло минут от определенного числа
$arHistory['DATE_FROM'] = '2018-05-03 00:00:00';
$arHistory['DATE_TO'] = '2018-05-03 23:59:59';
$unixMinut = (strtotime($arHistory['DATE_TO']) - strtotime($arHistory['DATE_FROM']));
$unixMinut = $unixMinut / 60;

Было примерно такое решение но получаю число 86399 и оно будет равняится 02:59 Хотя должно равняться 23:59
Как примерно это сделать?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
LightAir
@LightAir
LA
Вариант 1:
function diff(string $from, string $to): string
{
    return date_diff(new \DateTime($from), new \DateTime($to))->format('%h:%i');
}

$arHistory['DATE_FROM'] = '2018-05-03 00:00:00';
$arHistory['DATE_TO'] = '2018-05-03 23:59:59';

echo diff($arHistory['DATE_FROM'], $arHistory['DATE_TO']);


Вариант 2:
function diff(string $from, string $to): string
{
    $start = (new \DateTime($from))->getTimestamp();
    $end = (new \DateTime($to))->getTimestamp();

    $result = round(abs($start - $end) / 60 / 60, 4);

    $hours = (int)$result;
    $minutes = (int)(($result - $hours) * 60);

    return $hours . ':' . $minutes;
}

$arHistory['DATE_FROM'] = '2018-05-03 00:00:00';
$arHistory['DATE_TO'] = '2018-05-03 23:59:59';

echo diff($arHistory['DATE_FROM'], $arHistory['DATE_TO']);


code in sandbox

Варинат 3:
function diff(string $from, string $to): string
{
    return (new \DateTime($from))->diff(new \DateTime($to))->format('%h:%i');
}

$arHistory['DATE_FROM'] = '2018-05-03 00:00:00';
$arHistory['DATE_TO'] = '2018-05-03 23:59:59';

echo diff($arHistory['DATE_FROM'], $arHistory['DATE_TO']);


По разному можно. Выше лишь примеры, код ни на что не претендует. По делу стоило бы обрабатывать исключения и пр.

P.S
Варианты 1 и 3 только в пределах одного дня!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Yan-s
Для работы с временем и датами есть удобная либа https://carbon.nesbot.com/docs/#api-difference
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы