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

    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 только в пределах одного дня!
    Ответ написан
    Комментировать
  • Как сделать массив который давал бы запись вычитывающее 30 минут?

    BoShurik
    @BoShurik
    Symfony developer
    $from = new \DateTime('2018-05-03 00:00:00');
    $to = new \DateTime('2018-05-03 23:59:59');
    
    $period = new \DatePeriod($from, new \DateInterval('PT30M'), $to);
    
    $result = [];
    foreach ($period as $dateTime) {
        $dinner = clone $dateTime;
        $dinner->add(new \DateInterval('PT30M'));
    
        $result[] = $dateTime->format('H:i') . ' - ' . $dinner->format('H:i');
    }
    
    var_dump($result);
    Ответ написан
    Комментировать
  • Как сделать массив который давал бы запись вычитывающее 30 минут?

    it_monk
    @it_monk
    Разработчик в oncloud.ru
    $date_to = strtotime('2018-05-03 23:59:59');
    $date_from = strtotime('2018-05-03 00:00:00');
    for ($i = $date_from; $i <= $date_to; $i += 60 * 30){
         $aDinner[] = date('H:i', $i) . '-' . date('H:i', $i + 60 * 30);
    }
    Ответ написан
    2 комментария