169 votes

Jours entre deux dates ?

Quel est le moyen le plus court 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))

1 votes

Ce ne sont que deux dates, ou bien comprennent-ils aussi des informations sur l'heure ?

1 votes

0 votes

Date1 = date(2018,7,3) date2 = date(2018,9,29) days = (date2-date1).days # les jours sont déjà là print("Total semaines {} et jours {}".format(jours//7, jours%7)) ;

302voto

Paul D. Waite Points 35456

En supposant que vous ayez littéralement deux objets date, vous pouvez soustraire l'un de l'autre et interroger le résultat obtenu timedelta objet pour 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 cela fonctionne aussi avec les dates - je pense qu'il arrondit 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

2 votes

Coolness. D'une certaine manière, j'ai toujours supposé que "jours" faisait référence à la partie jour de la différence. Ainsi, par exemple, la différence entre 2010 et 2011 serait de 0 jour et 1 an, mais il s'avère qu'elle rapporte 365 jours comme je le voulais.

1 votes

@Bemmu : ah oui - je crois timedelta ne signale pas les unités de plus de quelques jours (mais je peux me tromper).

1 votes

Je calculais la différence de temps entre quelques heures, quelque chose comme 23 heures le jour 1 et 01 heure le jour 2. timedelta retourne 0 dans ces cas, ce qui n'est pas ce que je voulais. Je cherchais la différence de date. Comme solution, j'ai convertit la date en date et cela a fonctionné comme prévu !

47voto

DNS Points 17577

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

Pour simplement 24 heures, en supposant que vous utilisez le datetime de Python, alors l'option timedelta possède déjà une propriété days :

days = (a - b).days

Pour les jours calendaires, vous devrez arrondir a au jour inférieur et b au jour supérieur, 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

3 votes

Bonne remarque sur la différence entre les jours calendaires et les 24 heures. La question est de savoir pourquoi vous ajoutez un jour. Je pense que ce qui précède fonctionne parfaitement sans cela.

0 votes

C'est le contrôle des jours civils. Disons que A est le 18 juin 2013 à 16h00 et que B est le 19 juin 2013 à 2h00 ; un jour civil s'est écoulé, mais (B - A).days renvoie zéro car le delta n'est que de 10 heures.

0 votes

C'est le point que je soulève DNS votre code renvoie 2 parce que vous avez ajouté un autre jour. Sans ajouter un jour, il renvoie 1. Pourquoi ajouter un jour ?

10voto

M S Points 1150

Essayez :

(b-a).days

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

6voto

Matt Alcock Points 1913

Je fais référence à mes commentaires sur d'autres réponses. Voici comment je calculerai la différence entre les jours basés sur 24 heures et les jours du calendrier. L'attribut days fonctionne bien pour les 24 heures et la fonction fonctionne mieux pour les contrôles du 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 __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

1 votes

Il devrait être de (B - A).jours pour obtenir la différence exacte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X