Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rzorr

Tempo PHP

Recommended Posts

Boa Tarde,

Estou trabalhando e aprendendo em um projeto próprio, e preciso implementar a contagem de tempo entre uma postagem e outra, confesso que até procurei formas de cmo fazer mas não entendi muito bem, e então achei um script na net pronto, pensei não vou reinventar a roda. Bom o script funciona mais precisa de uns ajustes, estou tentado fazer ele funcionar com uma variávelque resgato do banco de dados, mas não estou conseguindo e acredito que seja por não saber como resgatar a variavel que vem do banco de dados dentro da function. alguém poderia me ajudar.

 

 

 

eu tentei assim

 

$tempo = $linhas['data'];

 

e então onde é $time eu troquei para tempo, porém não funciona.

public static function tempo_corrido($time) {

$now = strtotime(date('m/d/Y H:i:s'));
 $time = strtotime($time);
 $diff = $now - $time;

$seconds = $diff;
 $minutes = round($diff / 60);
 $hours = round($diff / 3600);
 $days = round($diff / 86400);
 $weeks = round($diff / 604800);
 $months = round($diff / 2419200);
 $years = round($diff / 29030400);

if ($seconds <= 60) return"1 min atrás";
 else if ($minutes <= 60) return $minutes==1 ?'1 min atrás':$minutes.' min atrás';
 else if ($hours <= 24) return $hours==1 ?'1 hrs atrás':$hours.' hrs atrás';
 else if ($days <= 7) return $days==1 ?'1 dia atras':$days.' dias atrás';
 else if ($weeks <= 4) return $weeks==1 ?'1 semana atrás':$weeks.' semanas atrás';
 else if ($months <= 12) return $months == 1 ?'1 mês atrás':$months.' meses atrás';
 else return $years == 1 ? 'um ano atrás':$years.' anos atrás';
 }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, Marcos_imasters disse:

Então a dúvida que eu tenho não era de como fazer no todo, afinal já esta feito. é como pegar o valor do banco e jogar dentro da function, resgatar o valor eu faço mas não consigo passar ele para dentro da function. Obrigado por enquanto!!!

10 horas atrás, Guilherme Luiz disse:

http://php.net/manual/pt_BR/datetime.diff.php

 

Simples, elegante e nativo. sem "gambiarras"

Obrigado, mas a dificuldade  está em como receber o valor do banco dentro da function. o script funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites
21 minutos atrás, Rzorr disse:

Então a dúvida que eu tenho não era de como fazer no todo, afinal já esta feito. é como pegar o valor do banco e jogar dentro da function, resgatar o valor eu faço mas não consigo passar ele para dentro da function. Obrigado por enquanto!!!

Obrigado, mas a dificuldade  está em como receber o valor do banco dentro da function. o script funciona

Amigo voce deve salva a data e hora em timestamp no SQL

 

exemplo para salva no banco:
 

$data ="13/06/2018";

$data_salvar = strtotime(str_replace('/', '-', $data));

 

exemplo conveter time em data

 

echo date("d/m/Y",strtotime(str_replace('/', '-', $data)));

qualquer duvida chama ai 

 

 

 

 

 

ai quando quiser exibir a data normal voce usa echo gmdate("d/m/Y H:i:s", $timestamp);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
//você indica o padrão m/d/Y H:i:s para o atual momento
$now = strtotime(date('m/d/Y H:i:s'));
//aqui você não indica o padrão
$time = strtotime($time);
//Logo essa subtração não vai dar certo
$diff = $now - $time;

Aqui você diz que o $now tem o formato m/d/Y H:i:s mas em $time você não da o formato da data...

 

Padronize a sua data para dentro dos parametros da função http://php.net/manual/es/datetime.diff.php e printe na tela diferença no padrão que você quiser com http://php.net/manual/es/dateinterval.format.php

<?php
//Data vinda do seu BD
$banco  = "13-06-2018 20:30";
//Pego o atual momento
$agora = new DateTime('now');
//Coloco a data no padrao do dateTime
$tempo = new DateTime(date('Y-m-d H:i:s', strtotime($banco)));
//verifico a diferença entre as datas
$intervalo = $agora->diff($tempo);
//printo a data e seu tempo de diferença
echo $intervalo->format('%H horas a %I minutos e %d dias');
?>

Da forma indicada acima você tem o mesmo resultado com 100 linhas a menos.

Não esqueça de marcar "Gostei" :)

Compartilhar este post


Link para o post
Compartilhar em outros sites
23 horas atrás, Guilherme Luiz disse:

//você indica o padrão m/d/Y H:i:s para o atual momento
$now = strtotime(date('m/d/Y H:i:s'));
//aqui você não indica o padrão
$time = strtotime($time);
//Logo essa subtração não vai dar certo
$diff = $now - $time;

Aqui você diz que o $now tem o formato m/d/Y H:i:s mas em $time você não da o formato da data...

 

Padronize a sua data para dentro dos parametros da função http://php.net/manual/es/datetime.diff.php e printe na tela diferença no padrão que você quiser com http://php.net/manual/es/dateinterval.format.php


<?php
//Data vinda do seu BD
$banco  = "13-06-2018 20:30";
//Pego o atual momento
$agora = new DateTime('now');
//Coloco a data no padrao do dateTime
$tempo = new DateTime(date('Y-m-d H:i:s', strtotime($banco)));
//verifico a diferença entre as datas
$intervalo = $agora->diff($tempo);
//printo a data e seu tempo de diferença
echo $intervalo->format('%H horas a %I minutos e %d dias');
?>

Da forma indicada acima você tem o mesmo resultado com 100 linhas a menos.

Não esqueça de marcar "Gostei" :)

 

Bom Dia, começo agradecendo a vocês dois que estão me ajudando.

Pegando o código acima que chamei de economia rsrsrsrs

 

Tentei fazer uma  seguinte separação da seguinte forma, não sei se estou totalmente correto na lógica, mas parece funcionar, me corrijam se estiver errado(eu sempre acho que está),

$newtempo = $linhas['data'];
            
//Data vinda do seu BD
$banco  = $newtempo;
//Pego o atual momento
$agora = new DateTime('now');
//Coloco a data no padrao do dateTime
$tempo = new DateTime(date('Y-m-d H:i:s', strtotime($banco)));
//verifico a diferença entre as datas
$intervalo = $agora->diff($tempo);

//printo a data e seu tempo de diferença

$dias =  $intervalo->format('%D dias');
$horas = $intervalo->format('%H horas');
$minutos = $intervalo->format('%I Min');

if($dias >=1){

  echo 'Há ' . $dias;

}elseif ($dias < 1) {

  echo $horas;

}elseif ($horas < 1) {

  echo $minutos;
}

 
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/06/2018 at 10:25, Rzorr disse:

 

Bom Dia, começo agradecendo a vocês dois que estão me ajudando.

Pegando o código acima que chamei de economia rsrsrsrs

 

Tentei fazer uma  seguinte separação da seguinte forma, não sei se estou totalmente correto na lógica, mas parece funcionar, me corrijam se estiver errado(eu sempre acho que está),


$newtempo = $linhas['data'];
            
//Data vinda do seu BD
$banco  = $newtempo;
//Pego o atual momento
$agora = new DateTime('now');
//Coloco a data no padrao do dateTime
$tempo = new DateTime(date('Y-m-d H:i:s', strtotime($banco)));
//verifico a diferença entre as datas
$intervalo = $agora->diff($tempo);

//printo a data e seu tempo de diferença

$dias =  $intervalo->format('%D dias');
$horas = $intervalo->format('%H horas');
$minutos = $intervalo->format('%I Min');

if($dias >=1){

  echo 'Há ' . $dias;

}elseif ($dias < 1) {

  echo $horas;

}elseif ($horas < 1) {

  echo $minutos;
}

 
?>

 

Alguma idéia para escrever os minutos, já tentei de varias fomas as horas e os dias estão OK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.