fernandopetry
3/9/2014 - 2:33 PM

data, mostrar tempo decorrido apartir de uma data ate a data atual

data, mostrar tempo decorrido apartir de uma data ate a data atual

	

    <?php
    /*
     
    Função bem util desenvolvida por mim (https://plus.google.com/u/0/+JhordanLima/post) para quem está fazendo um sistema de comentários ou algo do tipo para seu site em php.
    Ela trabalha com tempo, para deixar mais dinâmico, dizendo a quanto tempo foi enviado a mensagem. Porem para funcionar, a data precisa está de acordo com o formato (Ano/Mês/Dia Hora:Minuto:Segundo), formato padrão do datatime do banco de dados MySql.
     
    Obrigado a Thiago Belem pelo tutorial sobre trabalhar datas.
     
    http://blog.thiagobelem.net/trabalhando-com-datas-no-php/
     
    Jhordan Lima || http://fb.com/JhorZyto
     
    */
     
    function tempo_decorrido($data)//criar função
    {
    date_default_timezone_set("Brazil/East");//definir hora do servidor para horario do Brasil
    $timestamp_atual = time();//Puxar data-hora atual e transformar tudo em segundo contando desde 1970
    $timestamp = strtotime($data);//Puxar data-hora definido e transformar tudo em segundo contando desde 1970
    $hora = (int)$timestamp_atual-(int)$timestamp;//Fazer a subtração do atual para o definido, para saber a diferença e trabalhar com ela.
    if($hora < 60) // veriicar se a diferença é menor que 60segundos
    {
            $resultado = "Enviada agora";// se for menor ele retornará com a mensagem ao lado
    }
    elseif($hora < 3600) // veriicar se a diferença é menor que 3600 segundos, ou melhor dizendo, se é menor que 1 hora
    {
            $hora = $hora/60; // Se for menor que os 3600, ele fará uma divisão dos 3600segundos por 60 para retornar em minutos
            if((int)$hora < 2)// Se a divisão for menor que dois, ele retornará no singular
            {
                    $resultado = "Há ".(int)$hora." minuto"; // Mensagem de retorno
                    }else{ //Caso for maior ou igual a dois, ele retornará no plural
                            $resultado = "Há ".(int)$hora." minutos"; // Mensagem de retorno
                            }
    }
    elseif($hora < 86400)  // veriicar se a diferença é menor que 86400 segundos, ou melhor dizendo, se é menor que 24 horas/1dia
    {
            $hora = $hora/60/60; // Se for menor que os 86400, ele fará uma divisão dos 86400segundos por 60 duas vezes para retornar em horas
            if((int)$hora < 2) // Se a divisão for menor que dois, ele retornará no singular
            {
                    $resultado = "Há ".(int)$hora." hora";// Mensagem de retorno
                    }else{ //Caso for maior ou igual a dois, ele retornará no plural
                            $resultado = "Há ".(int)$hora." horas";// Mensagem de retorno
                            }
    }
    elseif($hora < 604800)
    {
            $hora = $hora/60/60/24; // Se for menor que os 604800, ele fará uma divisão dos 604800segundos por 60 duas vezes e por 24 para retornar em dias
            if((int)$hora < 2)// Se a divisão for menor que dois, ele retornará no singular
            {
                    $resultado = "Há ".(int)$hora." dia";// Mensagem de retorno
                    }else{ //Caso for maior ou igual a dois, ele retornará no plural
                            $resultado = "Há ".(int)$hora." dias";// Mensagem de retorno
                            }
    }
    else //Caso nenhuma das condições acima for aceita, este caso será chamado
    {
            $data = date('d/m/Y', $timestamp); //Puxar data definida
            $hora = date('H:i:s', $timestamp); //Puxar hora definida
            $resultado = $data." às ".$hora;   // Fazer a junção dos dois, não coloquei junto pois o às estava chamando segundos.
    }
    return $resultado; // Exibir o resultado final
    }
     
    /*Vejam uma demostração da função.*/
     
    $teste = '2014-03-08 19:00:00'; // Data e hora qualquer para fazer um teste
    echo "O tempo definido foi " . tempo_decorrido($teste); //Chamando a função
    ?>