Siempre debe guardar sus fechas en el formato de fecha y hora de MySQL (AAAA-MM-DD). Esto le permite aprovechar fácilmente la función de fecha integrada de MySQL. Almacenarlo en cualquier otro formato significa (potencialmente mucho) más trabajo para usted cuando quiere hacer más que simplemente mostrar esos valores.
Para lograr lo que desea hacer con PHP, DateTime()
(basado en esta respuesta
):
$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);
Estas líneas crean DateTime()
objetos con sus respectivas fechas.
$interval = $datetime1->diff($datetime2);
Esta línea resta la segunda fecha de la primera y devuelve la diferencia como DateInterval()
objeto.
if ($interval->days > 7)
Esta línea verifica que hayan transcurrido siete o más días entre las dos fechas. Si es así, se ejecuta el primer bloque de código. Si no, se imprime la primera fecha.
$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 bloque de código solo toma la diferencia de fecha entre las dos fechas (a DateInterval()
objeto) y lo formatea en el formato que solicitó. La segunda línea elimina los períodos de tiempo que no tienen valores (es decir, 0 meses) y los elimina de la cadena. La tercera línea toma cualquier período con un valor (es decir, 1 mes) y recorta las 's' innecesarias al final (es decir, 1 mes se convierte en 1 mes).