Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 262
Eren Süleymanoğlu Avatar asked Mar 08 '12 21:03

Eren Süleymanoğlu


2 Answers

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)
like image 118
dani herrera Avatar answered Oct 10 '22 08:10

dani herrera


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)
like image 44
Paulo Scardine Avatar answered Oct 10 '22 10:10

Paulo Scardine