Python: obtener el número de días entre fechas

En este tutorial, repasaremos cómo obtener la cantidad de días entre dos fechas en Python, utilizando el módulo de fecha y hora y los objetos timedelta, así como también agregar y restar marcos de tiempo fijos.

Introducción

En este tutorial, veremos cómo obtener el número de días entre dos fechas en Python.

Usaremos el paquete integrado datetime, que le permite trabajar muy fácilmente con objetos datetime en Python.

Creación de un objeto de fecha y hora

Como datetime es un módulo incorporado, puede acceder a él de inmediato importándolo en la parte superior de su archivo de Python.

Puede construir objetos datetime de diferentes maneras:

1
2
3
4
5
6
7
from datetime import datetime

date_string = "1 January, 2021"

now = datetime.now() # Create Datetime based on system clock
dt1 = datetime(day=1, month=1, year=2021) # Create Datetime with given arguments
dt2 = datetime.strptime(date_string, "%d %B, %Y") # Create Datetime from String

There are certain rules to follow when it comes to Convertir cadenas a fecha y hora en Python.

Obtener el número de días entre fechas en Python {#getnumberofdays betweendatesinpython}

Tratar de medir la cantidad de días entre fechas sin usar el módulo de fecha y hora es una tarea engañosamente compleja: entre la contabilidad de los años bisiestos y la cantidad de días de cada mes, tratar de crear su propia implementación no tiene sentido.

Sin embargo, con datetime, se vuelve trivial.

Simplemente puede restar una fecha o fechahora entre sí, para obtener el número de días entre ellas:

1
2
3
4
5
6
7
from datetime import datetime

date1 = datetime.now()
date2 = datetime(day=1, month=7, year=2021)

timedelta = date2 - date1
print(timedelta)

Esto devuelve un objeto timedelta, que contiene días, segundos y microsegundos y representa la duración entre dos objetos date/time o datetime.

Imprimir este objeto devolverá los días, horas, minutos, segundos y microsegundos de ese evento:

1
149 days, 5:22:52.255124

Si no está interesado en algunas de estas métricas, puede especificar a cuál de ellas le gustaría acceder con timedelta.days, timedelta.seconds y timedelta.microseconds:

1
2
3
4
5
6
7
now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Today is: ', now)
print('New Year is on: ', new_years)
print('Days until New Years: ', countdown.days)

Aquí, hemos asignado los días entre ahora y nuevo_año en cuenta regresiva, que es un objeto timedelta.

Luego, simplemente podemos acceder al parámetro days de ese objeto para obtener la cantidad de días entre ellos. Esto resulta en:

1
2
3
Today is:  2021-02-01 18:35:12.272524
New Year is on:  2022-01-01 00:00:00
Days until New Years:  333

Sumar y restar días usando TimeDelta

¿Qué pasaría si en lugar de tratar de restar dos fechas conocidas, quisieras sumar o restar un marco de tiempo? Por ejemplo, un cliente se suscribió a su servicio por una tarifa mensual. Querrás recordarles que lo renueven después de 30 días.

Puedes construir un marco de tiempo para esos 30 días, usando timedelta y sumarlo o restarlo de cualquier otro objeto datetime:

1
2
3
4
5
6
7
from datetime import datetime, timedelta

now = datetime.now()
thirty_days = timedelta(days=30)

print('In 30 days: ', now + thirty_days)
print('30 days ago: ', now - thirty_days)

Esto resulta en:

1
2
In 30 days:  2021-03-03 18:41:49.922082
30 days ago:  2021-01-02 18:41:49.922082

Esta es una característica increíblemente útil cuando se intenta implementar la programación o recuperar entradas de la base de datos en función de una ventana móvil (como los últimos 30 días).

Conclusión

En este tutorial, cubrimos todo lo que necesita saber sobre cómo obtener la cantidad de días entre dos fechas en Python.

Hemos trabajado con objetos datetime y timedelta para lograr esta funcionalidad.