2012-03-08 14 views
6

Quiero encontrar un mes después de una fecha, pero no sé cómo.¿Cómo encontrar un mes después de una fecha con django?

Digamos que tengo esta fecha:

08.03.2012 

Quiero encontrar un mes después de esa fecha de forma automática como:

08.04.2012 

¿Alguien sabe cómo hacer eso?

+0

en una plantilla o en python? – jterrace

+0

en python, pero se me agradecerá si me explicas que ambos –

+0

1 mes es + 30 días o es 1 mes es flexible? –

Respuesta

25

Con 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) 
+4

también necesita instalar python-dateutil para usar esto. –

+0

@marltu, tienes razón. Aquí [dateutil doc] (http://labix.org/python-dateutil). Instalado por defecto con la instalación de python Ubuntu. No sé sobre otras distribuciones de Linux o Windows. – danihp

1

Como comentó Niklas, dado que los meses varían en longitud, un mes a partir de hoy puede ser bastante ambiguo.

Todas las industrias tienen algún tipo de convención; el resultado puede ser diferente dependiendo de tus objetivos. Por ejemplo, ¿se usará para cálculos de intereses? ¿se usará para generar facturas recurrentes?

Si quieren 30 días a partir de hoy:

>>> import datetime 
>>> d1 = datetime.date.today() 
>>> d1 
datetime.date(2012, 3, 8) 
>>> d1 + datetime.timedelta(30) 
datetime.date(2012, 4, 7) 

no puede ser lo que quiera si el mes tiene 31 días:

>>> 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) 

Sin embargo, no puede ser el resultado de lo esperado si el mes que viene tiene menos de 30 días:

>>> 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) 
1

Si está utilizando la fecha y hora presentada, se puede sacar el mes agregan y la n configurarlo de nuevo.

tales como:

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

, por supuesto, todavía estoy confundido sobre cómo funciona el tiempo la fecha si no eres un delimitador utilizando sería la mejor opción

+2

Esto no funcionará para fechas como 12/1/2014 que envolverán el año. –

Cuestiones relacionadas