O objetivo deste código é exibir uma mensagem personalizada de acordo com o tempo decorrido desde uma determinada data.
É um sistema similar ao utilizado no Twitter, onde cada tuíte é acompanhado de uma mensagem na timeline: “1 minute ago” (“há um minuto”). Conforme o tempo vai passando, a mensagem muda.
### Função para calcular a diferença entre datas e mostrar uma mensagem personalizada ### ### Por @JoaoRicardo_RM / [email protected] ### ### livre para modificações ### #### para chamar a função bastar usar data(data_do_banco) formato americano. Ex: data(2011-03-19 20:47:32) #### // define o fuso horário. No caso o meu é de caracas. Só para a hora do servidor bater corretamente. // veja mais fusos aqui https://www.php.net/manual/pt_BR/timezones.php date_default_timezone_set('America/Caracas'); function data($data){ // criamos a função $data_atual = mktime(); // data atual em segundos // a data vem do banco de dados então ela está no formato americano. // se sua data está no formato dd/mm/aaaa hh:mm:ss basta descomentar (tirar as duas barras //) a linha de baixo //date("Y-m-d H:i:s",$data); // separamos as partes da data list($ano,$mes,$dia) = explode("-",$data); list($dia,$hora) = explode(" ",$dia); list($hora,$min,$seg) = explode(":",$hora); // transformamos a data do banco em segundos usando a função mktime() $data_banco = mktime($hora,$min,$seg,$mes,$dia,$ano); $diferenca = $data_atual - $data_banco; // subtraímos a data atual menos a data do banco em segundos $minutos = $diferenca/60; // dividimos os segundos por 60 para transformá-los em minutos $horas = $diferenca/3600; // dividimos os segundos por 3600 para transformá-los em horas $dias = $diferenca/86400; // dividimos os segundos por 86400 para transformá-los em dias // abaixo fazemos verificações para definir a mensagem a ser mostrada. if($minutos < 1){ // se a tiver passado de 0 a 60 segundos $diferenca = "há alguns segundos. Mais precisamente: ".$diferenca." segundos"; } elseif($minutos > 1 && $horas < 1) { // se tiver passado de 1 a 60 minutos if(floor($minutos) == 1 or floor($horas) == 1){ $s = ''; } else { $s = 's'; } // plural ou singular de minuto $diferenca = "há ".floor($minutos)." minuto".$s; } elseif($horas <= 24) { // se tiver passado de 1 a 24 horas if(floor($horas) == 1){ $s = ''; } else { $s = 's'; } // plural ou singular de hora $diferenca = "há ".floor($horas)." hora".$s; } elseif($dias <= 2){ // se tiver passado um dia $diferenca = "ontem"; } elseif($dias <= 7){ // se tiver passado 6 dias $diferenca = "há ".floor($dias)." dias"; } elseif($dias <= 8){ // se tiver passado uma semana (7 dias) $diferenca = "há uma semana"; } else { $diferenca = date("d/m/Y",$data_banco); } return $diferenca; // mostramos a mensagem com a diferença de tempo }