¿Días entre dos fechas?

¿Cuál es la forma más corta de ver cuántos días completos han transcurrido entre dos fechas? Esto es lo que estoy haciendo ahora.

math.floor((b - a).total_seconds()/float(86400)) 

Suponiendo que literalmente tienes dos objetos de fecha, puedes restar uno de otro y consultar el objeto resultante de timedelta para el número de días:

 >>> from datetime import date >>> a = date(2011,11,24) >>> b = date(2011,11,17) >>> ab datetime.timedelta(7) >>> (ab).days 7 

Y también funciona con tiempos de datos, creo que se redondea al día más cercano:

 >>> from datetime import datetime >>> a = datetime(2011,11,24,0,0,0) >>> b = datetime(2011,11,17,23,59,59) >>> ab datetime.timedelta(6, 1) >>> (ab).days 6 

¿Te refieres a días calendario completos, o grupos de 24 horas?

Por solo 24 horas, asumiendo que estás usando datetime de Python, entonces el objeto timedelta ya tiene una propiedad de días:

 days = (a - b).days 

Para los días calendario, deberá redondear el día más cercano y b hasta el día más cercano, eliminando el día parcial de cada lado:

 roundedA = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0) roundedB = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0) days = (roundedA - roundedB).days 

Tratar:

 (ba).days 

Intenté con b y a de tipo datetime.date .

Haciendo referencia a mis comentarios sobre otras respuestas. Así es como resolvería la diferencia en días en base a 24 horas y días calendario. El atributo días funciona bien durante 24 horas y la función funciona mejor para verificaciones de calendario.

 from datetime import timedelta, datetime def cal_days_diff(a,b): A = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0) B = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0) return (A - B).days if __name__ == '__main__': x = datetime(2013, 06, 18, 16, 00) y = datetime(2013, 06, 19, 2, 00) print (y - x).days # 0 print cal_days_diff(y, x) # 1 z = datetime(2013, 06, 20, 2, 00) print (z - x).days # 1 print cal_days_diff(z, x) # 2