2012-03-08 29 views
6

Tôi muốn tìm một tháng sau đó từ một ngày nhưng tôi không biết làm thế nào.Làm thế nào để tìm thấy một tháng sau đó từ một ngày với django?

phép nói rằng tôi có ngày này:

08.03.2012 

Tôi muốn tìm một tháng sau kể từ ngày đó tự động như:

08.04.2012 

Có ai biết làm thế nào để làm điều đó?

+0

trong mẫu hoặc trong python? – jterrace

+0

trong python nhưng tôi sẽ được đánh giá cao nếu bạn giải thích cả hai –

+0

1 tháng là + 30 ngày hoặc là 1 tháng là linh hoạt? –

Trả lời

25

Với 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

bạn cũng cần cài đặt python-dateutil để sử dụng. –

+0

@marltu, bạn nói đúng. Ở đây [dateutil doc] (http://labix.org/python-dateutil). Cài đặt theo mặc định với cài đặt Ubuntu python. Tôi không biết về các bản phân phối linux hoặc windows khác. – danihp

1

Như Niklas đã nhận xét, vì tháng khác nhau về độ dài, một tháng kể từ hôm nay có thể khá mơ hồ.

Mọi ngành đều có một số loại quy ước; kết quả có thể khác nhau tùy thuộc vào mục tiêu của bạn. Ví dụ, nó sẽ được sử dụng để tính toán lãi suất? nó sẽ được sử dụng để tạo ra các hóa đơn tái phát?

Nếu bạn muốn 30 ngày kể từ ngày hôm nay:

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

Có thể không được những gì bạn muốn nếu tháng có 31 ngày:

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

Tuy nhiên, có thể không phải là kết quả mà bạn mong đợi nếu vào tháng tới có ít hơn 30 ngày:

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

Nếu bạn đang sử dụng ngày giờ gửi, bạn có thể kéo tháng thêm vào và n đặt lại.

như:

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

dĩ nhiên tôi vẫn còn nhầm lẫn về thời gian ngày làm việc như thế nào nếu bạn không phải là một dấu phân cách sử dụng sẽ là lựa chọn tốt nhất của bạn

+2

Thao tác này sẽ không hoạt động trong các ngày như tháng 12/1/2014 sẽ bao gồm năm. –

Các vấn đề liên quan