web-dev-qa-db-fra.com

Jours entre deux dates?

Quel est le moyen le plus rapide de savoir combien de jours entiers se sont écoulés entre deux dates? Voici ce que je fais maintenant.

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

En supposant que vous ayez littéralement deux objets de date, vous pouvez les soustraire et interroger l’objet résultant timedelta pendant le nombre de jours:

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

Et ça marche aussi avec les dates-heures - je pense que ça se termine au jour le plus proche:

>>> 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
209
Paul D. Waite

Voulez-vous dire des jours calendaires complets ou des groupes de 24 heures?

Pour simplement 24 heures, en supposant que vous utilisiez la date et l'heure Python, l'objet timedelta a déjà une propriété days:

days = (a - b).days

Pour les jours civils, vous devrez arrondir un au jour le plus proche et b au jour le plus proche, en éliminant le jour partiel de chaque côté:

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
33
DNS

Référencer mes commentaires sur d'autres réponses. C'est ainsi que je calculerais la différence en jours sur la base de 24 heures et de jours calendaires. l'attribut days fonctionne bien pendant 24 heures et la fonction fonctionne mieux pour les vérifications de calendrier.

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 __== '__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 
5
Matt Alcock

Essayer:

(b-a).days

J'ai essayé avec b et a de type datetime.date.

5
M S