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))
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))
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
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.
@Bemmu : ah oui - je crois timedelta
ne signale pas les unités de plus de quelques jours (mais je peux me tromper).
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 !
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
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.
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.
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 ?
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
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.
1 votes
Ce ne sont que deux dates, ou bien comprennent-ils aussi des informations sur l'heure ?
1 votes
Ah - voir aussi stackoverflow.com/questions/151199/
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)) ;