How to turn string into time in PHP?

3

I have 2 strings that represent times. How to calculate the difference between the two.

$string1 = "12:04:32";
$string2 = "18:07:34";
    
asked by anonymous 14.10.2015 / 20:50

6 answers

2

Try the following code:

<?php

$string1 = strtotime("12:04:32");
$string2 = strtotime("18:07:34");

$intervalo  = abs($string2 - $string1);
var_dump('Diferença em segundos: ' . $intervalo);

$minutos   = round($intervalo / 60, 2);
var_dump('Diferença em minutos: ' . $minutos);

$horas   = round($minutos / 60, 2);
var_dump('Diferença em horas: ' . $horas);

?>
    
14.10.2015 / 21:07
4

You can use the combination of methods diff() which calculates the difference between the hours and format () to format the time as desired in the DateTime class.

DateTime exists since PHP 5.2, already the methods diff () and createFromFormat () are only available in PHP 5.3

<?php

$hora1 = DateTime::createFromFormat('H:i:s', '12:04:32');
$hora2 = DateTime::createFromFormat('H:i:s', '18:07:34');

echo $hora1->diff($hora2)->format('%H horas %i minutos e %s segundos');
    
14.10.2015 / 21:22
2

You can use the object DateTime() :

<?php

$string1 = "12:04:32";
$string2 = "18:07:34";
list($h1,$m1,$s1) = explode(':',$string1);
list($h2,$m2,$s2) = explode(':',$string2);

$dateTimeOne = new DateTime();
$dateTimeOne->setTime($h1, $m1, $s1);

$dateTimeTwo = new DateTime();
$dateTimeTwo->setTime($h2, $m2, $s2);

$interval = $dateTimeOne->diff($dateTimeTwo);
echo $interval->format('%H horas %i minutos e %s segundos');
    
14.10.2015 / 21:29
0

You can convert hours and minutes to seconds to make it easier to calculate the difference.

$horaA = "01:30:00"; // HORA INICIAL
$horaB = "20:23:12"; // HORA FINAL

// Função de calculo. Se tiver mais de uma hora para calcular
// torne-a uma variável e adicione um parâmetro na função

function calculaTempo($hora_inicial, $hora_final){
    $i = 1;           // Para facilitar a lógica
    $tempo_total;

    $tempos = array($hora_final, $hora_inicial);

    foreach($tempos as $tempo) {
        $segundos = 0;

        // Cria uma lista com os valores de hora, minuto e segundo
        list($h, $m, $s) = explode(':', $tempo);

        // Passagem dos valores para segundos
        $segundos += $h * 3600;
        $segundos += $m * 60;
        $segundos += $s;

        $tempo_total[$i] = $segundos;

        $i++;
    }

    // Calculo da diferença do tempo em segundos
                // $horaA           $horaB          $horaC...
    $segundos = $tempo_total[1] - $tempo_total[2];

    // Valor das horas      
    $horas = floor($segundos / 3600);
    $segundos -= $horas * 3600;

    // Valor dos minutos
    $minutos = str_pad((floor($segundos / 60)), 2, '0', STR_PAD_LEFT);
    $segundos -= $minutos * 60;

    // Valor dos segundos
    $segundos = str_pad($segundos, 2, '0', STR_PAD_LEFT);

    // RESULTADO
    return "$horas:$minutos:$segundos";
}

$horario=calculaTempo($horaA, $horaB);
    
14.10.2015 / 22:22
-3
$timeString = date('H:i:s',strtotime($time))
    
14.10.2015 / 21:25
-5

Using

strtotome($string_da_dora)
    
14.10.2015 / 21:22