Nếu tất cả những gì bạn muốn là bất kỳ ngày nào trong tháng trước, điều đơn giản nhất bạn có thể làm là trừ số ngày của ngày hiện tại, sẽ cho bạn ngày cuối cùng của tháng trước.
Ví dụ: bắt đầu bằng bất kỳ ngày nào:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2016, 5, 24)
Trừ các ngày của ngày hiện tại, chúng tôi nhận được:
>>> last_day_previous_month = today - datetime.timedelta(days=today.day)
>>> last_day_previous_month
datetime.date(2016, 4, 30)
Điều này là đủ cho nhu cầu đơn giản hóa của bạn vào bất kỳ ngày nào trong tháng trước.
Nhưng bây giờ bạn đã có nó, bạn cũng có thể nhận được bất kỳ ngày nào trong tháng, bao gồm cùng ngày bạn bắt đầu (tức là nhiều hơn hoặc ít hơn khi trừ đi một tháng):
>>> same_day_last_month = last_day_previous_month.replace(day=today.day)
>>> same_day_last_month
datetime.date(2016, 4, 24)
Tất nhiên, bạn cần phải cẩn thận với ngày 31 của một tháng 30 ngày hoặc những ngày bị thiếu từ tháng Hai (và lưu ý đến các năm nhuận), nhưng điều đó cũng dễ thực hiện:
>>> a_date = datetime.date(2016, 3, 31)
>>> last_day_previous_month = a_date - datetime.timedelta(days=a_date.day)
>>> a_date_minus_month = (
... last_day_previous_month.replace(day=a_date.day)
... if a_date.day < last_day_previous_month.day
... else last_day_previous_month
... )
>>> a_date_minus_month
datetime.date(2016, 2, 29)
((date.month+delta-1) % 12)+1công trình, phương tiện cácif not m: m = 12thể loại bỏ được