[Fixed]-How to find one month later from a date with django?

43👍

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)

2👍

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)

0👍

If you are using the datetime filed, you can pull out the month add it and then set it back.

such as:

d = datetime.date(2003, 7, 29)
d=d.month+1

of course i am still confused on how date time works if your not a delimiter using [“.”] would be your best bet

Leave a comment