I want to find one month later from a date but I don't know how.
Lets say I have this date:
08.03.2012
I want to find one month later from that date automatically like:
08.04.2012
Does anyone know how to do that?
With dateutil:
>>> import datetime
>>> d1 = datetime.date.today()
>>> from dateutil.relativedelta import relativedelta
>>> d1 + relativedelta(months=1)
datetime.date(2012, 4, 8)
>>> d2 = datetime.date(year=2012,month=1,day=31)
>>> d2 + relativedelta(months=1)
datetime.date(2012, 2, 29)
As Niklas commented, since months vary in length, one month from today can be pretty ambiguous.
Every industry has some sort of convention; the result may be different depending on your goals. For example, will it be used for interest calculations? will it be used to generate recurrent bills?
If you want 30 days from today:
>>> import datetime
>>> d1 = datetime.date.today()
>>> d1
datetime.date(2012, 3, 8)
>>> d1 + datetime.timedelta(30)
datetime.date(2012, 4, 7)
May not be what you want if month has 31 days:
>>> d2 = datetime.date(2012, 1, 1)
>>> d2 + datetime.timedelta(30)
datetime.date(2012, 1, 31)
>>> import calendar
>>> calendar.monthrange(2012, 1)
(6, 31)
>>> d2 + datetime.timedelta(calendar.monthrange(d2.year, d2.month)[1])
datetime.date(2012, 2, 1)
Yet, may not be the result you expect if next month has less than 30 days:
>>> d3 = datetime.date(2012, 1, 31)
>>> d3 + datetime.timedelta(calendar.monthrange(d3.year, d3.month)[1])
datetime.date(2012, 3, 2)
>>> import dateutil
>>> d3 + dateutil.relativedelta.relativedelta(months=1)
datetime.date(2012, 2, 29)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With