Para calcular o tempo decorrido a partir de um determinado timestamp em PHP, e exibir as horas até 24 horas e depois contar em dias, você pode fazer uso da função date_diff()
para calcular a diferença entre duas datas e a classe DateTime
para manipular datas e horários. Aqui está um exemplo de como você pode fazer isso:
<?php
function calcularTempoDecorrido($timestamp) {
$agora = new DateTime();
$dataInicial = DateTime::createFromFormat('Y-m-d H:i:s', $timestamp);
// Calcula a diferença entre as datas
$intervalo = date_diff($agora, $dataInicial);
// Verifica se a diferença é menor que 24 horas
if ($intervalo->days == 0 && $intervalo->h < 24) {
return $intervalo->format('%h horas');
} else {
// Calcula o tempo em dias
$dias = $intervalo->days;
$horas = $intervalo->h;
$totalHoras = $dias * 24 + $horas;
return "$dias dias e $horas horas ($totalHoras horas no total)";
}
}
// Timestamp de exemplo
$timestamp = '2024-03-22 08:30:00';
echo "Tempo decorrido desde $timestamp: " . calcularTempoDecorrido($timestamp);
?>
Neste código, a função calcularTempoDecorrido()
aceita um timestamp no formato ‘Y-m-d H:i:s’, cria um objeto DateTime
para a data atual e outro para a data inicial fornecida. Em seguida, utiliza date_diff()
para calcular a diferença entre as datas.
Se a diferença for menor que 24 horas, ele retorna a diferença em horas. Caso contrário, calcula o número total de horas e dias decorridos e retorna essa informação.
Para um melhor resultado, você pode contar o tempo em horas até 23 horas e depois contar em dias se passar disso. Podemos ajustar o código para fazer isso. Aqui está a versão modificada:
<?php
function calcularTempoDecorrido($timestamp) {
$agora = new DateTime();
$dataInicial = DateTime::createFromFormat('Y-m-d H:i:s', $timestamp);
// Calcula a diferença entre as datas
$intervalo = date_diff($agora, $dataInicial);
// Verifica se a diferença é menor que 23 horas
if ($intervalo->days == 0 && $intervalo->h < 23) {
return $intervalo->format('%h horas');
} else {
// Calcula o tempo em dias
$dias = $intervalo->days;
$horas = $intervalo->h;
$totalHoras = $dias * 24 + $horas;
// Se passou das 23 horas, incrementa um dia
if ($horas >= 23) {
$dias++;
$horas = 0;
}
return "$dias dias e $horas horas";
}
}
// Timestamp de exemplo
$timestamp = '2024-03-22 08:30:00';
echo "Tempo decorrido desde $timestamp: " . calcularTempoDecorrido($timestamp);
?>
Nesta versão, ajustamos a condição para verificar se a diferença é menor que 23 horas em vez de 24 horas. Se passar de 23 horas, incrementamos um dia ao cálculo final. Isso deve atender às suas necessidades de contar em horas até 23 horas e depois em dias.
Se a data inicial vem de uma variável, você pode passá-la diretamente para a função calcularTempoDecorrido()
. Aqui está como você pode modificar a função para aceitar a data inicial como um parâmetro:
<?php
function calcularTempoDecorrido($dataInicial) {
$agora = new DateTime();
// Calcula a diferença entre as datas
$intervalo = date_diff($agora, $dataInicial);
// Verifica se a diferença é menor que 23 horas
if ($intervalo->days == 0 && $intervalo->h < 23) {
return $intervalo->format('%h horas');
} else {
// Calcula o tempo em dias
$dias = $intervalo->days;
$horas = $intervalo->h;
$totalHoras = $dias * 24 + $horas;
// Se passou das 23 horas, incrementa um dia
if ($horas >= 23) {
$dias++;
$horas = 0;
}
return "$dias dias e $horas horas";
}
}
// Timestamp de exemplo
$timestamp = '2024-03-22 08:30:00';
$dataInicial = DateTime::createFromFormat('Y-m-d H:i:s', $timestamp);
echo "Tempo decorrido desde $timestamp: " . calcularTempoDecorrido($dataInicial);
?>
Neste caso, você cria um objeto DateTime
a partir do timestamp fornecido e passa esse objeto diretamente para a função calcularTempoDecorrido()
. Isso permite que você utilize a função com qualquer data inicial fornecida por variável.