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.
Deja una respuesta