Advertisement
  1. Code
  2. PHP

Cómo comparar fechas en PHP

Scroll to top
Read Time: 5 min

Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)

La comparación de fechas se vuelve necesaria cuando creas plugins o sitios web de reserva y programación de eventos en PHP. También tiene muchos otros usos, dependiendo de cómo implementes las cosas. Por ejemplo, podríamos usarla para crear eventos promocionales con caducidad en nuestros scripts de PHP.

PHP viene con funciones y métodos dedicados que puedes usar para comparar fechas al escribir código de estilo procedimental u orientado a objetos. En este tutorial discutiremos ambos.

Compara fechas en PHP (estilo orientado a objetos)

Existe una clase DateTime en PHP que puedes usar para crear objetos DateTime. Puedes enviarle una cadena de fecha/hora válida junto con un argumento de zona horaria opcional para crear un objeto DateTime. Estos son algunos ejemplos:

1
<?php
2
3
$past = new DateTime("18 May 2021");
4
$now = new DateTime("now");
5
$dist_past = new DateTime("2002-09-21 18:15:00");
6
$dist_future = new DateTime("12-09-2036");
7
8
?>

Puedes usar operadores de comparación simples en estos objetos DateTime para comparar las fechas ahora y verificar si el valor devuelto es true o false.

1
<?php
2
3
$past = new DateTime("18 May 2021");
4
$now = new DateTime("now");
5
$dist_past = new DateTime("2002-09-21 18:15:00");
6
$dist_future = new DateTime("12-09-2036");
7
8
9
if($past < $now) {
10
    echo 'The first date is in the past.';
11
}
12
// Output: The first date is in the past.

13
14
15
if($past > $dist_past) {
16
    echo 'The third date is in the distant past.';
17
}
18
// Output: The third date is in the distant past.

19
20
21
if($dist_future > $now) {
22
    echo 'The fourth date is in the future.';
23
}
24
// Output: The fourth date is in the future.

25
26
?>

Diferencia de fechas en PHP (estilo orientado a objetos)

En ocasiones, es posible que quieras obtener más información al comparar fechas. En PHP existen métodos y funciones dedicadas para calcular la diferencia entre fechas.

Una vez que hayas creado tus objetos DateTime, también puedes llamar al método diff() en un objeto y enviarle la otra fecha para calcular la diferencia entre ellas. Esto te devolverá un objeto DateInterval.

Ten en cuenta que la fecha en la que llamaste a diff() se restará de la fecha enviada a este método. Puedes dar formato a la diferencia de cualquier manera que desees después de eso mediante el uso del método format(). Aquí puedes ver algunos ejemplos:

1
<?php
2
3
$last = new DateTime("25 Dec 2020");
4
$now = new DateTime("now");
5
$next = new DateTime("25 Dec 2021");
6
7
$days_last = $last->diff($now);
8
9
$days_next = $now->diff($next);
10
11
echo $days_last->format('%a days').' since last Christmas.';
12
// Output: 170 days since last Christmas.

13
14
echo $days_next->format('%a days').' to next Christmas.';
15
// Output: 194 days to next Christmas.

16
17
?>

Puedes enviar muchos parámetros al método format() para controlar la manera en la que PHP genera la diferencia. En nuestro ejemplo, usamos %r para determinar la relatividad de la diferencia. Un valor positivo significa que la fecha enviada a diff() se encuentra en el futuro en comparación con la fecha que lo llamó. Un valor negativo significa que la fecha enviada a diff() se encuentra en el pasado en comparación con la fecha que lo llamó. La cadena %a se usa para mostrar la cantidad de días y horas. También puedes usar otras cadenas como %H%I y %S para mostrar horas, minutos y segundos, respectivamente. Puedes encontrar todos estos caracteres de formato en la documentación del método format().

Compara fechas en PHP (estilo procedimental)

Puedes usar un conjunto diferente de funciones si prefieres escribir código de estilo procedimental. En este caso, podemos usar la función date_create() para crear nuestros objetos DateTime a partir de la cadena enviada. Las variables que definas aún almacenarán objetos DateTime, pero tú no las instanciarás explícitamente.

Dado que todavía estamos tratando con objetos DateTime, los operadores de comparación regulares aún nos permitirán comparar estas fechas.

1
<?php
2
3
$past = date_create("18 May 2021");
4
$now = date_create("now");
5
$dist_past = date_create("2002-09-21 18:15:00");
6
$dist_future = date_create("12-09-2036");
7
8
if($past < $now) {
9
    echo 'The first date is in the past.';
10
}
11
// Output: The first date is in the past.

12
13
14
if($past > $dist_past) {
15
    echo 'The third date is in the distant past.';
16
}
17
// Output: The third date is in the distant past.

18
19
20
if($dist_future > $now) {
21
    echo 'The fourth date is in the future.';
22
}
23
// Output: The fourth date is in the future.

24
25
?>

Diferencia de fechas en PHP (estilo procedimental)

Al igual que el método diff() de la clase DateTime, existe una función date_create() correspondiente que puedes usar para calcular la diferencia entre dos fechas. Esta acepta dos parámetros, y la fecha proporcionada en el primer parámetro se resta de la fecha en el segundo parámetro.

Este es un ejemplo para calcular la cantidad de días que han pasado desde la última Navidad, y la cantidad de días que faltan para la siguiente Navidad.

1
<?php
2
3
$last = date_create("25 Dec 2020");
4
$now = date_create("now");
5
$next = date_create("25 Dec 2021");
6
7
$days_last = date_diff($last, $now);
8
9
$days_next = date_diff($now, $next);
10
11
echo date_interval_format($days_last, '%a days').' since last Christmas.';
12
// Output: 170 days since last Christmas.

13
14
echo date_interval_format($days_next, '%a days').' to next Christmas.';
15
// Output: 194 days to next Christmas.

16
17
?>

Queríamos mantener la cantidad de días devuelta en ambos casos como un valor positivo, por lo que el tiempo que viene después se envía como segundo parámetro.

Pensamientos finales

PHP viene con métodos y funciones útiles para comparar dos fechas, dependiendo de tu estilo de escritura de código. Puedes obtener más información, como la diferencia horaria exacta entre dos fechas, usando el método diff() y la función date_diff() en PHP. He tratado de cubrir los conceptos básicos de la comparación de fechas en PHP en este tutorial. Deberías considerar leer la documentación para aprender a dar formato a la diferencia de fechas de maneras más avanzadas.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.