Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, usuários.
Há um bom tempo estava procurando uma função que diferenciava as datas de maneira correta e exibisse algo como "Postado há X horas", mas foi difícil de encontrar. Por sorte, achei uma função na internet, dei uma adaptada e estou postando aqui.
Peço desculpas por não citar fonte/autor da função original, mas já faz um bom tempo que tinha ela comigo.
Encorajo qualquer dica e/ou tipo de melhora. ;)
<?php
/**
* Função responsável para fazer a diferença
* de horas, dias e meses nas datas
* vindas do banco.
*
* Lembrando que está no formato timestamp do banco
* de dados
* @return String
*/
function datediff ($primeiraData, $segundaData, $tipoDataData){
date_default_timezone_set("America/Sao_Paulo");
if ( !$segundaData OR $segundaData < $primeiraData ) { // Se não existir segunda data ou se esta for menor que a primeira...
return "Não foi possível calcular a diferença entre as datas.";
} else {
if ( strlen($primeiraData) > 10 ) { // Se a primeira data tiver mais de 10 caracteres...
$inicio = mktime(substr($primeiraData, -8, 2),
substr($primeiraData, -5, 2),
substr($primeiraData, -2),
substr($primeiraData, 5, 2),
substr($primeiraData, 8, 2),
substr($primeiraData, 0, 4));
} else { // Ou então...
$inicio = mktime(0, 0, 0,
substr($primeiraData, 5, 2),
substr($primeiraData, -2),
substr($primeiraData, 0, 4));
}
if ( strlen($segundaData) > 10 ) { // Se a segunda data tiver mais de 10 caracteres...
$fim = mktime(substr($segundaData, -8, 2),
substr($segundaData, -5, 2),
substr($segundaData, -2),
substr($segundaData, 5, 2),
substr($segundaData, 8, 2),
substr($segundaData, 0, 4));
} else { // Ou então...
$fim = mktime(0, 0, 0,
substr($segundaData, 5, 2),
substr($segundaData, -2),
substr($segundaData, 0, 4));
}
$diferenca = ( $time_fim - $time_inicio ); // Diminui os valores
switch( $tipoData ){
case "i": return round($diferenca / 60); break; // Divide a diferença dos valores por 60 e o arredonda
case "H": return round($diferenca / 3600); break; // Divide a diferença dos valores por 3600 e o arredonda
case "d": return round($diferenca / 86400); break; // Divide a diferença dos valores por 86400 e o arredonda
}
}
}
?>
Abraços!
Carregando comentários...