Bonjour,
Petite question sur les dates :
J'ai 2 dates au format datetime,
je cherche à connaître l'écart entre 2 dates,
MAIS EN NBRE DE MOIS !
Connaissez-vous le truc ? Merci pour vos réponses !
Version imprimable
Bonjour,
Petite question sur les dates :
J'ai 2 dates au format datetime,
je cherche à connaître l'écart entre 2 dates,
MAIS EN NBRE DE MOIS !
Connaissez-vous le truc ? Merci pour vos réponses !
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 from datetime import datetime #une fonction qui fait ca def diffInMonth(dateD, dateG): ''' Difference entre operande de gauche et celui de droite ''' if(dateD < dateG): print "Erreur : dateD < dateG" exit(0) #Difference entre les annees _retour = (dateD.year - dateG.year)*12 #difference entre les mois _retour += (dateD.month - dateG.month) return _retour #L'algo ici datea = datetime(2008,04,30) dateb = datetime(2007,05,29) #La difference s'obtien en faisant une soustraction le resultat etant une classe deltatime delta = datea - dateb #print print "la difference en jour", delta.days print "la difference en jour/30", delta.days/30 print "la difference en mois en utilisant ma fonction diffInMonth", diffInMonth(datea, dateb )
azalsup--> je vois pas pourquoi tu introduis cette instruction:
sauf que si tu veux faire voir la différence entre le résultat de ta fonction(qui est la plus efficace) et celui de cette instruction.En fait cette dernière, au delà d'une durée de 5 ans(environ), ne renvoie plus le nombre de mois exacte entre deux dates. (vu que les mois de l'année ne se composent pas tous de 30 jours)Code:print "la difference en jour/30", delta.days/30
Mais tu as bien fait d'écrireet non -- print "la difference en mois" -- :aie:Citation:
print "la difference en jour/30"
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #!/usr/bin/env python # coding: Latin-1 -*- class myDate: def __init__(self, y, m, d): self.y=y self.m=m self.d=d def __str__(self): return "%d/%d/%d" % (self.d, self.m, self.y) def bissext(self): return ((self.y % 4) == 0 and (self.y % 100) != 0) or (self.y % 400) == 0 def inc(self): self.d+=1 if self.d < 29: return if self.d == 29 and self.m == 2 and self.bissext(): return if self.d <= 30 and\ (self.m == 4 or self.m == 6 or self.m == 9 or self.m == 11): return if self.d <= 31 and\ (self.m == 1 or self.m == 3 or self.m == 5 or self.m == 7 or self.m == 8 or self.m == 10 or self.m == 12): return self.d=1 if self.m < 12: self.m+=1 else: self.m=1 self.y+=1 def __ne__(self, other): return self.d != other.d or self.m != other.m or self.y != other.y def ecartM(d1, d2): m=0 while d1 != d2: d1.inc() if d1.d == 1: m+=1 #print "%s (%d)" % (d1, m) return m print ecartM(myDate(2004, 12, 02), myDate(2027, 1, 01))