Como saber la diferencia entre 2 fechas con la clase DateTime de PHP

En este artículo vas a descubrir como saber la diferencia entre 2 fechas utilizando la clase DateTime que tiene disponible PHP.

Esta clase te puede alegrar el día si necesitas comparar fechas, saber el tiempo transcurrido entre 2 fechas o saber el tiempo que falta para llegar a una determinada fecha.

Definición de la clase DateTime

La clase DateTime es una representación completa de la fecha y la hora que ayuda muchísimo a tratar los datos de tipo fecha y hora en tus rutinas.

Puedes hacer infinidad de cosas con los métodos que trae la propia clase tales como:

  • Añadir una cantidad de días, meses, años, horas, minutos y segundos a un objeto DateTime.
  • Alterar la marca temporal.
  • Establecer la fecha y hora.
  • Cambiar la zona horaria para el objeto DateTime.
  • Sustraer una cantidad de días, meses, años, horas, minutos y segundos de un objeto DateTime.
  • Y algunos detalles más.

Puedes encontrar una documentación más completa en DateTime.

Propósito – mostrar el tiempo transcurrido entre 2 fechas

En el caso de este tutorial, voy a partir de un ejemplo en funcionamiento que tiene 2 fechas: la fecha de creación y la fecha de actualización.

El objetivo principal de este artículo es saber la diferencia entre 2 fechas, mostrando en pantalla el número de años, meses, días, horas, minutos y segundos entre ambas fechas.

Vas a descubrir cuanto tiempo ha pasado desde que se creó un elemento y lo voy a mostrar en pantalla de la forma siguiente:

Fecha de creación: 2019-11-14 12:00:00

Fecha de actualización: 2019-11-15 12:33:22

Tiempo transcurrido: 1 día 33 minutos 22 segundos.

Cada vez que se recarga la página, el tiempo transcurrido se actualiza.

De la misma forma, la fecha de actualización también se actualiza con la actual y la fecha de creación se mantiene fija.

¿Cómo conseguir mostrar el tiempo transcurrido entre 2 fechas?

La clase DateTime nos ayuda mucho en este trabajo. Dispone de un método que permite directamente sacar la diferencia entre 2 fechas.

En el ejemplo en funcionamiento voy a tener 2 fechas: la fecha de creación que se trata de una fecha fija que representa precisamente el momento exacto en el que se creó el objeto.

Imagínate que esta fecha pueda venir de una base de datos o estar guardada en algún fichero o lo que se te ocurra.

En el caso del ejemplo, voy a escribirlo directamente ya que no es el propósito de este tutorial.

Observa lo siguiente:

echo '<p>Fecha de creación: 2019-11-14 12:00:00</p>';

La fecha de actualización va a ser la fecha en la que se está cargando la página y ejecutando la rutina:

echo '<p>Fecha de actualización: '.date('Y-m-d H:i:s').'</p>';

A continuación, voy a instanciar 2 objetos de tipo DateTime para calcular la diferencia entre los 2 objetos:

$date_add = new DateTime('2019-11-14 12:00:00');
$date_upd = new DateTime(date('Y-m-d H:i:s'));
$diff = $date_add->diff($date_upd);

Seguidamente, creo una variable de tipo cadena que contendrá el tiempo transcurrido en años, meses, días, horas, minutos y segundos.

Se puede conseguir así:

echo 'Tiempo transcurrido: ';
 
$time_elapsed = '';
 
if ($diff->y > 0 && $diff->y != 1) {
    $time_elapsed .= $diff->y.' años ';
}
 
if ($diff->m > 0) {
    $time_elapsed .= $diff->m.' meses ';
}
 
if ($diff->days > 0 && $diff->days != 1) {
    $time_elapsed .= $diff->days.' días ';
} else {
    $time_elapsed .= $diff->days.' día ';
}
 
if ($diff->h > 0 && $diff->h != 1) {
    $time_elapsed .= $diff->h.' horas ';
} elseif ($diff->h == 1) {
    $time_elapsed .= $diff->h.' hora ';
}
 
if ($diff->i > 0  && $diff->i != 1) {
    $time_elapsed .= $diff->i.' minutos ';
} elseif ($diff->i == 1) {
    $time_elapsed .= $diff->i.' minuto ';
}
 
if ($diff->s > 1 && $diff->i != 1) {
    $time_elapsed .= ' '.$diff->s.' segundos.';
} else {
    $time_elapsed .= $diff->s.' segundo.';
}
 
echo $time_elapsed;

Y con esto ya lo tienes.

Este código lo puedes utilizar en muchos casos y, como puedes observar, está bastante fácil poder editarlo para armar lo que necesites en relación al trabajo con fechas y horas.

Ver demo Descargar

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (No hay votos)
Cargando…
Comparte en las redes sociales

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Ver más sobre