Дни между двумя датами в Python

Какой самый короткий способ узнать, сколько дней прошло два дня? Вот что я делаю сейчас.

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

Ответ 1

Предполагая, что вы буквально получили два объекта даты, вы можете вычесть одно из другого и запросить полученный timedelta объект за количество дней

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

И он тоже работает с датами - думаю, округляется до ближайшего дня:

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

Ответ 2

Вы имеете в виду полные календарные дни или группы в течение 24 часов?

Всего за 24 часа, предполагая, что вы используете дату и время Python, объект timedelta уже имеет свойство days:

days = (a - b).days

Для календарных дней вам нужно округлить до ближайшего дня, а b до ближайшего дня, избавившись от частичного дня с обеих сторон:

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

Ответ 3

Try:

(b-a).days

Я попробовал с b и a типа datetime.date.

Ответ 4

Ссылка на мои комментарии к другим ответам. Вот как я мог бы разобраться в разнице в днях на основе 24 часов и календарных дней. атрибут days работает хорошо в течение 24 часов, и функция работает лучше всего для проверки календаря.

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