Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera, tudo bem?
Tenho o seguinte codigo:
class Data {
public static function ExibirTempoDecorrido($date)
{
if(empty($date))
{
return "Informe a data";
}
$periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
$duracao = array("60","60","24","7","4.35","12","10");
$agora = time();
$unix_data = strtotime($date);
// check validity of date
if(empty($unix_data))
{
return "Bad date";
}
// is it future date or past date
if($agora > $unix_data)
{
$diferenca = $agora - $unix_data;
$tempo = "atrás";
}
else
{
$diferenca = $unix_data - $agora;
$tempo = "agora";
}
for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++)
{
$diferenca /= $duracao[$j];
}
$diferenca = round($diferenca);
if($diferenca != 1)
{
$periodos[$j].= "s";
}
return "$diferenca $periodos[$j] {$tempo}";
}
}
Funciona redondinho se o valor retornado for de algumas horas, mas...
Quando passa de dois meses, ele retorna a palavra **mess.** Deve ser por conta dessa linha
if($diferenca != 1)
{
$periodos[$j].= "s";
}
Quero que modre:
2 meses atrás
e não
2 mess atrás.
Espero que tenham entendido.
Valeuvocê pode criar um array associativo onde as chaves são os períodos no singular e os valores são os períodos no plural. Dessa forma, você evita problemas com a pluralização manual. Além disso, algumas melhorias podem ser feitas para tornar o código mais claro e eficiente.
<?php
class Data {
public static function ExibirTempoDecorrido($date)
{
if (empty($date)) {
return "Informe a data";
}
$periodos = array(
"segundo" => "segundos",
"minuto" => "minutos",
"hora" => "horas",
"dia" => "dias",
"semana" => "semanas",
"mês" => "meses",
"ano" => "anos",
"década" => "décadas"
);
$duracao = array(60, 60, 24, 7, 4.35, 12, 10);
$agora = time();
$unix_data = strtotime($date);
// Verificar a validade da data
if (empty($unix_data)) {
return "Data inválida";
}
// Verificar se é uma data futura ou passada
if ($agora > $unix_data) {
$diferenca = $agora - $unix_data;
$tempo = "atrás";
} else {
$diferenca = $unix_data - $agora;
$tempo = "agora";
}
$j = 0;
while ($diferenca >= $duracao[$j] && $j < count($duracao) - 1) {
$diferenca /= $duracao[$j];
$j++;
}
$diferenca = round($diferenca);
// Determinar a forma singular ou plural
$periodo = array_keys($periodos)[$j];
if ($diferenca != 1) {
$periodo = $periodos[$periodo];
}
return "$diferenca $periodo $tempo";
}
}
// Chame o método estático ExibirTempoDecorrido passando uma data
$data = '2023-05-15 14:00:00'; // Exemplo de data
echo Data::ExibirTempoDecorrido($data);
?>
class Data {
https://ideone.com/hj5Qok