Running time (Calculating dates)

Asked

Viewed 80 times

-1

hello, can anyone tell me what’s going on here?

date_default_timezone_set('America/Sao_Paulo'); 

function tempo_corrido($data_informada) {
$agora = strtotime(date('d/m/Y H:i:s'));
$data_informada = strtotime($data_informada);
$data_a = $agora - $data_informada;
$segundos = $data_a;
$minutos = round($data_a / 60);
$horas = round($data_a / 3600);
$dias = round($data_a / 86400);
$semanas = round($data_a / 604800);
$meses = round($data_a / 2419200);
$anos = round($data_a / 29030400);
if ($segundos <= 60) return "1 min atrás";
else if ($minutos <= 60) return $minutos==1 ?'1 min atrás':$minutos.' min atrás';
else if ($horas <= 24) return $horas==1 ?'1 hrs atrás':$horas.' hrs atrás';
else if ($dias <= 7) return $dias==1 ?'1 dia atras':$dias.' dias atrás';
else if ($semanas <= 4) return $semanas==1 ?'1 semana atrás':$semanas.' semanas atrás';
else if ($meses <= 12) return $meses == 1 ?'1 mês atrás':$meses.' meses atrás';
else return $anos == 1 ? 'um ano atrás':$anos.' anos atrás';
}

tempo_corrido("24/04/2018 23:02:56");

no matter what date/time I inform, always returns me 1 min ago

1 answer

1


Timestamp creation is wrong because it expects a date in specific format (as per manual), I made the change to use getTimestamp() after creating a Datetime from a specific format (createFromFormat).

Look how it turned out:

<?php
date_default_timezone_set('America/Sao_Paulo'); 

function tempo_corrido($data_informada) {
    $timestampInformado = DateTime::createFromFormat('!d/m/Y H:i:s', $data_informada)->getTimestamp();
    $agora = strtotime("now");
    $data_a = $agora - $timestampInformado;
    $segundos = $data_a;
    $minutos = round($data_a / 60);
    $horas = round($data_a / 3600);
    $dias = round($data_a / 86400);
    $semanas = round($data_a / 604800);
    $meses = round($data_a / 2419200);
    $anos = round($data_a / 29030400);
    if ($segundos <= 60) return "1 min atrás";
    else if ($minutos <= 60) return $minutos==1 ?'1 min atrás':$minutos.' min atrás';
    else if ($horas <= 24) return $horas==1 ?'1 hrs atrás':$horas.' hrs atrás';
    else if ($dias <= 7) return $dias==1 ?'1 dia atras':$dias.' dias atrás';
    else if ($semanas <= 4) return $semanas==1 ?'1 semana atrás':$semanas.' semanas atrás';
    else if ($meses <= 12) return $meses == 1 ?'1 mês atrás':$meses.' meses atrás';
    else return $anos == 1 ? 'um ano atrás':$anos.' anos atrás';
}

echo tempo_corrido("23/01/2018 23:02:56");

?>
  • worked out, thank you very much :D

  • @Javascript , maravilha!! thanks for the feedback. Could you mark the answer as correct? If you do not know how to do this read this: http://pt.meta.stackoverflow.com/q/1078/3635

Browser other questions tagged

You are not signed in. Login or sign up in order to post.