Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP Converter data para dias/horas/segundos em branco atrás


Você deve sempre salvar suas datas no formato de data e hora do MySQL (AAAA-MM-DD). Isso permite que você aproveite facilmente a funcionalidade de data integrada do MySQL. Armazená-lo em qualquer outro formato significa (potencialmente muito) mais trabalho para você quando quiser fazer mais do que apenas exibir esses valores.

Para realizar o que você deseja fazer com o PHP, você deve DateTime() (com base em esta resposta ):
$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);
$interval  = $datetime1->diff($datetime2);
if ($interval->days <= 7)
{
    $elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
    $elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
    $elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
    echo $elapsed;
}
else 
{
    echo $firstDate;
}

$datetime1 = new DateTime($firstDate);
$datetime2 = new DateTime($secondDate);

Essas linhas criam DateTime() objetos com suas respectivas datas.
$interval  = $datetime1->diff($datetime2);

Esta linha subtrai a segunda data da primeira e retorna a diferença como um DateInterval() objeto.
if ($interval->days > 7)

Esta linha verifica se sete ou mais dias se passaram entre as duas datas. Se sim, o primeiro bloco de código é executado. Caso contrário, a primeira data é impressa.
$elapsed   = $interval->format('%y years, %m months, %a days, %h hours, %i minutes, %S seconds');
$elapsed   = str_replace(array('0 years,', ' 0 months,', ' 0 days,',  ' 0 hours,', ' 0 minutes,'), '', $elapsed);
$elapsed   = str_replace(array('1 years, ', ' 1 months, ', ' 1 days, ',  ' 1 hours, ', ' 1 minutes'), array('1 year, ', '1 month, ', ' 1 day, ', ' 1 hour, ', ' 1 minute'), $elapsed);
echo $elapsed;

Este bloco de código apenas leva a diferença de data entre as duas datas (um DateInterval() object) e o formata no formato solicitado. A segunda linha remove quaisquer períodos de tempo que não tenham valores (ou seja, 0 meses) e os remove da string. A terceira linha pega qualquer período com um valor (ou seja, 1 mês) e corta os 's' desnecessários no final (ou seja, 1 mês se torna 1 mês).