Diferentes formas de comparar fechas en PHP

Habdul Hazeez 30 enero 2023
  1. Compara fechas con strtotime() y time()
  2. Compare fechas con la función Date() y verificación condicional
  3. Comparar fechas con una función personalizada
  4. Comparar fechas con el objeto PHP Datetime
  5. Comparaciones de fechas múltiples con Arsort() y strtotime()
Diferentes formas de comparar fechas en PHP

Este artículo le enseñará cómo comparar fechas en PHP usando 5 técnicas diferentes. De estas técnicas, 4 usarán funciones PHP integradas como strtotime(), time() y date() de una forma u otra. La última técnica utilizará el objeto PHP DateTime.

Compara fechas con strtotime() y time()

El strtotime() es una función de tiempo integrada en PHP. Su uso principal es convertir una cadena de fechas legibles por humanos en una marca de tiempo UNIX igual. Puede analizar variedades de cadenas y convertirlas a su marca de tiempo adecuada. Ejemplos de este tipo de cadenas son 2 weeks ago y next week.

La función PHP time() devuelve la hora actual. Este tiempo es el número de segundos desde la época de UNIX. Si necesita convertir estos segundos a la fecha actual, necesitará la función date() integrada de PHP.

Al combinar estas 2 funciones, puede comparar fechas siguiendo los siguientes pasos.

Primero, proporciona una cadena de fecha a strtotime(). Lo convertirá a su marca de tiempo UNIX.

Reste esta marca de tiempo UNIX de la hora actual usando la función time().

Puede usar el resultado de este cálculo y una verificación condicional para comparar fechas.

<?php
  $dateString = '2021-12-12 21:00:00';

  // This will check if the time
  // is in the last day
  if ((time() - (60 * 60 * 24)) < strtotime($dateString)) {
      echo "Date in the last 24hrs";
  } else {
      echo "Date is <b>NOT</b> in the last 24hrs";
  }
?>

Producción :

Date is <b>NOT</b> in the last 24hrs

Compare fechas con la función Date() y verificación condicional

La función date() de PHP le permite formatear una marca de tiempo en el formato deseado. La marca de tiempo en cuestión, los segundos entre la hora actual y la época de UNIX. La época UNIX es el tiempo desde la medianoche del 1 de enero de 1970.

El valor de la función date() depende de la zona horaria configurada en su archivo php.ini.

Si desea comparar una fecha determinada utilizando la función date(), haga lo siguiente.

  1. Convierta la marca de tiempo actual al formato deseado
  2. Escriba la fecha que le gustaría comparar en una cadena apropiada
  3. Realice una verificación condicional entre la cadena de fecha y la marca de tiempo actual
<?php
  $todaysDate = date("Y-m-d H:i:s");
  $dateString = "2021-10-12 10:00:00";
  
  if ($dateString < $todaysDate) {
      echo "The date you supplied is LESS than the current date";
  } else {
      echo "The date you supplied is NOT LESS than the current date";
  }
?>

Producción :

The date you supplied is LESS than the current date

Comparar fechas con una función personalizada

Utiliza una función para evitar la repetición de código. El primer ejemplo de este tutorial mostró cómo puede comparar fechas con strtotime() y time().

En este caso, creará una función. Esta función aceptará una cadena de fecha como parámetro, que a su vez pasará a strtotime(). Pasas la cadena "today" a otra strtotime() dentro de la función.

Ahora, tienes dos cosas que puedes comparar, que son,

  1. El tiempo que desea comparar
  2. La cadena ‘hoy’ pasó a otra strtotime()

Puede utilizar una comparación estricta para comparar las fechas con estos criterios. Puede crear una función de comparación para verificar lo siguiente.

  1. Fecha de hoy
  2. Una fecha pasada
  3. Una fecha futura

Lo siguiente verificará si la cadena de fecha proporcionada es una fecha actual:

<?php
  function checkToday($time) {
      $convertToUNIXtime = strtotime($time);
      $todayUNIXtime = strtotime('today');
  
      return $convertToUNIXtime === $todayUNIXtime;
  }
  
  if (checkToday('2021-12-13')) {
      echo "Yeah it's today";
  } else {
      echo "No, it's not today";
  }
?>

Producción :

No, it's not today

Compruebe si hay una fecha pasada.

<?php
  function checkThePast($time) {
      $convertToUNIXtime = strtotime($time);
  
      return $convertToUNIXtime < time();
  }
  
  if (checkThePast('2021-12-13 22:00:00')) {
      echo "The date is in the past";
  } else {
      echo "No, it's not in the past";
  }
?>

Producción :

The date is in the past

Puede verificar una fecha futura con lo siguiente.

<?php
  function checkTheFuture($time) {
      $convertToUNIXtime = strtotime($time);
  
      return $convertToUNIXtime > time();
  }
  
  if (checkTheFuture('2021-12-13 22:00:00')) {
      echo "The date is in the future";
  } else {
      echo "No, it's not in the future";
  }
?>

Producción :

No, it's not in the future

Comparar fechas con el objeto PHP Datetime

La clase PHP DateTime le brinda una forma orientada a objetos de trabajar con cadenas de fecha en PHP. Tiene un conjunto de métodos con los que puede trabajar. Encapsula algo de lógica detrás de la escena y le brinda una interfaz limpia para trabajar.

En comparación con strtotime() y date(), DateTime tiene las siguientes ventajas:

  1. Puede funcionar con más cadenas de fecha
  2. Es más fácil trabajar con
  3. Proporciona una comparación directa de fechas

Cuando pretenda comparar fechas con DateTime, haga lo siguiente.

  1. Analice la cadena de fecha en un objeto DateTime
  2. Compara las fechas con operadores como menor que ( < ), mayor que ( > ) o igual a ( == )
<?php
  $firstDate = new DateTime("2020-12-13");
  $secondDate = new DateTime("2021-12-13");
  
  // Compare the date using operators
  if ($firstDate > $secondDate) {
      echo "First date is GREATER than the second date";
  } else if ($firstDate < $secondDate) {
      echo "First date is LESS than the second date";
  } else {
      echo "First and second dates are EQUAL";
  }
?>

Producción :

First date is LESS than the second date

Comparaciones de fechas múltiples con Arsort() y strtotime()

Si desea comparar muchas cadenas de fechas, puede almacenarlas en un array.

Con las fechas en la matriz, puede usar un método de bucle adecuado para trabajar con la matriz. Por ejemplo, foreach.

En el bucle dentro de foreach, puede convertir cada fecha a su marca de tiempo UNIX usando strtotime(). Después, puedes ordenar las fechas con arsort().

<?php
  // Store the dates
  $dateArray = ["2020-09-30", "2021-12-13", "2021-08-05"];
  
  // Convert each date to a UNIX timestamp
  // and store them in another array
  $dateArrayTimestamp = [];
  foreach ($dateArray as $date) {
      $dateArrayTimestamp[] = strtotime($date);
  }
  
  // Sort the dates,
  arsort($dateArrayTimestamp);
  
  // Print the date starting with the
  // current date
  foreach ($dateArrayTimestamp as $key => $value) {
      echo "$key - " . date("Y - m - d", $value) . "<br>";
  }
?>

Producción :

1 - 2021 - 12 - 13<br>2 - 2021 - 08 - 05<br>0 - 2020 - 09 - 30<br>
Habdul Hazeez avatar Habdul Hazeez avatar

Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.

LinkedIn

Artículo relacionado - PHP DateTime