Ir para conteúdo

POWERED BY:

Arquivado

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

Mateus Silva

Subtrair datas (PHP)

Recommended Posts

Olá, já dei uma olhada aqui no fórum e infelizmente não achei nada que resolvesse meu problema, é o seguinte:

Estou fazendo um sistema de notícias e outro de eventos, no caso tenho 2 problemas:

1. O sistema de notícias em vez de aparecer: "postado em 01/05/2013, ás 23:40" eu gostaria que aparecesse: "postado há 5 minutos/postado há 1 hora/postado há 2 semanas/postado há 2 meses/postado há 3 anos"

2. No sistema de eventos eu queria que aparecesse: "O evento ocorrerá daqui a 9 dias/1 mes/2 semanas/1 ano, etc"

Como posso resolver isto ? Preciso urgente, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com certeza deve ter dezenas de tópicos aqui com problemas muito similares e que poderiam ajudá-lo, mas caçar é complicado...

 

 

Então, creio que isso deve solucionar seus dois problemas:

 

 function difer_data($data) {    date_default_timezone_set('America/Sao_Paulo');     $agora = new DateTime();        try {        $data_ref = new DateTime($data);            } catch (Exception $e) {        echo $e->getMessage();        return NULL;    }        /* Identifica se $data_ref é no futuro ou no passado e define       o prefixo apropriado */    $prefixo = ($data_ref > $agora) ? "Faltam" : "Postado há";     // Calcula a diferença entre $data_ref e a $agora    $intervalo = $data_ref->diff($agora);     /* Transforma o objeto DateTime em um array e extrai os elementos       para as variáveis $y (anos), $m (meses), $d (dias), $i (minutos)       e $s (segundos). */    extract((array) $intervalo);     if ($y >= 1) {        $sufixo = "{$y} " . ($y == 1 ? "ano":"anos");    } else    if ($m >= 1) {        $sufixo = "{$m} " . ($m == 1  ? "mês":"meses");    } else    if ($d > 7) {        $sufixo = floor($d / 7) . " " . ($d <= 14 ? "semana":"semanas");    } else    if ($d >= 1) {        $sufixo = "{$d} " . ($d == 1  ? "dia":"dias");    } else    if ($h >= 1) {        $sufixo = "{$h} " . ($h == 1  ? "hora":"horas") /*. " e {$i} minutos"*/;    } else    if ($i >= 1) {        $sufixo = "{$i} " . ($i == 1  ? "minuto":"minutos");    } else {        $sufixo = "{$s} segundos";    }     return "{$prefixo} {$sufixo}";} // Exemplo de Uso:echo difer_data('2013-05-02 14:55:00');

 

 

Observações:

  • Você deve usar a mesma função tanto para as postagens quanto para os eventos.
  • A data precisa estar no formato: AAAA-MM-DD HH:MM:SS. Este também é o formato do campo SQL DATETIME; portanto é recomendável que você armazene sua data num campo do tipo DATETIME ou DATE.
  • Na parte que mostra a hora, você pode "descomentar" esse pedaço de código /*. " e {$i} minutos"*/ (só retirar /* e */), e fazer com que além de exibir a hora, exiba também os minutos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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