Cette solution fonctionne correctement pour le mois de décembre, la plupart des réponses sur cette page n'ont pas.
Vous devez d'abord déplacer le mois à partir de la base 1 (ie Jan = 1) à la base 0 (ie Jan = 0) avant d'utiliser le modulo ( % ) ou de la division entière ( // ), autrement novembre (11) plus 1 mois vous donne 12, qui au moment de trouver le reste ( 12 % 12 ) donne 0.
(Et ne pas suggérer "(mois % 12) + 1" ou Oct + 1 = décembre!)
def AddMonths(d,x):
newmonth = ((( d.month - 1) + x ) % 12 ) + 1
newyear = d.year + ((( d.month - 1) + x ) / 12 )
return datetime.date( newyear, newmonth, d.day)
Mais ... ca n'a pas de compte pour le problème comme Jan 31 + un mois. Nous en revenons donc à l'OP - qu'entendez-vous par l'ajout d'un mois? Un soln est de revenir en arrière jusqu'à ce que vous arrivez à un jour de validité, étant donné que la plupart des gens supposent que le dernier jour de janvier, plus d'un mois, est égal au dernier jour de Février.
Ce sera le travail sur les nombres négatifs des mois.
La preuve:
>>> import datetime
>>> AddMonths(datetime.datetime(2010,8,25),1)
datetime.date(2010, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),4)
datetime.date(2010, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),5)
datetime.date(2011, 1, 25)
>>> AddMonths(datetime.datetime(2010,8,25),13)
datetime.date(2011, 9, 25)
>>> AddMonths(datetime.datetime(2010,8,25),24)
datetime.date(2012, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-1)
datetime.date(2010, 7, 25)
>>> AddMonths(datetime.datetime(2010,8,25),0)
datetime.date(2010, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-12)
datetime.date(2009, 8, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-8)
datetime.date(2009, 12, 25)
>>> AddMonths(datetime.datetime(2010,8,25),-7)
datetime.date(2010, 1, 25)>>>