Cómo calcular la diferencia entre dos fechas usando PHP

  1. Usando strtotime() para calcular la diferencia entre dos fechas para la versión de PHP por debajo de 5.3
  2. Usando los objetos DateTime() y DateInterval() para PHP 5.3 y superior

Hay varias maneras de calcular la diferencia entre dos fechas usando PHP. Este artículo le mostrará cómo usar la versión de PHP < 5.3 y el método más nuevo y fiable para la versión más reciente (>5.3) para calcular la diferencia de fechas.

Usando strtotime() para calcular la diferencia entre dos fechas para la versión de PHP por debajo de 5.3

El strtotime() convierte dos fechas a tiempo UNIX y calcula el número de segundos a partir de ellas. A partir de esto, es más fácil calcular diferentes métodos usando segundos. La función acepta un parámetro de cadena en inglés que muestra la descripción de la fecha-hora.

Ejemplo:

$firstDate = "2019-01-01";
$secondDate = "2020-03-04";

$dateDifference = abs(strtotime($secondDate) - strtotime($firstDate));

$years  = floor($dateDifference / (365 * 60 * 60 * 24));
$months = floor(($dateDifference - $years * 365 * 60 * 60 * 24) / (30 * 60 * 60 * 24));
$days   = floor(($dateDifference - $years * 365 * 60 * 60 * 24 - $months * 30 * 60 * 60 *24) / (60 * 60 * 24));

echo $years." year,  ".$months." months and ".$days." days";

//output: 1 year, 2 months and 3 days

El ejemplo anterior obtiene la diferencia de dos fechas usando varias funciones como abs(), floor() y principalmente la strtotime().

La strtotime() obtiene el valor en segundos UNIX de las fechas y usando abs() para tener el valor absoluto de la primera fecha.

La función floor() se utiliza para redondear los segundos al entero más cercano.

Para obtener el año, multiplique 365 días por 60 minutos, 60 segundos y 24 horas, y luego divídalo por la diferencia.

Para obtener los meses, multiplique 30 días por 60 minutos, 60 segundos y 24 horas y divídalo por la diferencia de la diferencia de fecha multiplicada por el año y 365 días, 60 minutos, 60 segundos y 24 horas.

Luego para obtener la diferencia de día, multiplicar 60 minutos, 60 segundos y 24 horas y dividirla por la diferencia de la diferencia de fecha, producto de los años, 365 días, 60 minutos, 60 segundos y 24 horas y los productos de los meses, 30 días, 60 minutos y 60 segundos y 24 horas.

Finalmente, juntarlo todo en una variable para imprimir la diferencia final.

Usando los objetos DateTime() y DateInterval() para PHP 5.3 y superior

Este método es un estilo orientado a objetos para obtener la diferencia entre dos fechas, este es también el más fácil ya que no requiere el cálculo manual de las fechas y recomendado ya que es de la más reciente versión de PHP.

Ejemplo:

$firstDate  = new DateTime("2019-01-01");
$secondDate = new DateTime("2020-03-04");
$intvl = $firstDate->diff($secondDate);

echo $intvl->y . " year, " . $intvl->m." months and ".$intvl->d." day"; 
echo "\n";
// Total amount of days
echo $intvl->days . " days ";

//output: 1 year, 2 months and 1 day
//        428 days

En el ejemplo anterior, a diferencia de usar strtotime() y más funciones y cálculos, los objetos DateTime() y DateInterval() lo hicieron más fácil.

Primero, declare las fechas usando new DateTime(). Luego, obtener el valor entero de la diferencia usando el objeto DateInterval() diff() en la primera fecha y pasar la segunda fecha como parámetro.

Luego, finalmente, para obtener el year sólo usa el objeto y. Usa m para obtener los meses y d para el día.

Artículo relacionado - PHP Date

  • Cómo convertir un formato de fecha a otro en PHP
  • Artículo relacionado - PHP DateTime

  • Cómo convertir una cadena a fecha y hora en PHP
  • Cómo convertir una fecha en una marca de tiempo en PHP