python日历,用于向后计算月份

python日历,用于向后计算月份,python,calendar,Python,Calendar,我们正在尝试用python创建一个日历函数。我们已经创建了一个小型内容管理系统,要求是,网站右上角将有一个下拉列表,该列表将提供选项-月份-1个月、2个月、3个月等等,如果用户选择8个月,则应显示过去8个月的PostScont。问题是,我们试图编写一个小代码,它可以进行月份计算,但问题是它不考虑超出当前月份的月份,它只显示了今年的月份数。 例如:如果用户选择3个月,它将显示L 3个月的计数,即当前月份和前2个月,但是如果用户选择超过4个月的选项,则不考虑上个月的月份,只显示当前的月份。 我正在粘

我们正在尝试用python创建一个日历函数。我们已经创建了一个小型内容管理系统,要求是,网站右上角将有一个下拉列表,该列表将提供选项-月份-1个月、2个月、3个月等等,如果用户选择8个月,则应显示过去8个月的PostScont。问题是,我们试图编写一个小代码,它可以进行月份计算,但问题是它不考虑超出当前月份的月份,它只显示了今年的月份数。 例如:如果用户选择3个月,它将显示L 3个月的计数,即当前月份和前2个月,但是如果用户选择超过4个月的选项,则不考虑上个月的月份,只显示当前的月份。 我正在粘贴下面的代码:-

您可以在datetime模块中使用timedelta来减去月份

from datetime import datetime, timedelta

now = datetime.now()
four_months_ago = now - timedelta(days=(4*365)/12)
这将在必要时追溯到一年前

>>> january_first = datetime(2009, 1,1)
>>> january_first - timedelta(days=(4*365)/12)
datetime.datetime(2008, 9, 2, 0, 0)

这是一个棘手的问题,因为月份的长度不同。7月31日减去一个月是多少?我有一个类似的要求,但我做了一个简化的假设,我一直想要n个月前的第一天。如果有助于满足您的要求,请参阅:

from datetime import date

def add_months(start_date, months):
    return date(
        start_date.year + (start_date.month - 1 + months) / 12,
        (start_date.month - 1 + months) % 12 + 1,
        1)

python dateutil包中的relativedelta函数实现了以下功能:

from dateutil.relativedelta import *
import datetime

five_months_ago = datetime.datetime.now() - relativedelta(months=5)

嘿,伙计,你解决了我的问题,谢谢你。你可以点击我答案左边的复选按钮,将其标记为已接受答案。如果你将2月份包括在内,那么倒数时就会失败,因为你将把2月份计算到1月份。通常情况下,这不会是一个问题,但你不希望它在今天(3月1日或2日)失败,对吗?没有简单的方法可以找出n个月前是什么月吗?@Jough-如果只有timedeltamonths=X,但可惜没有。这需要额外的包:。它存在于诸如Anaconda之类的发行版中
from dateutil.relativedelta import *
import datetime

five_months_ago = datetime.datetime.now() - relativedelta(months=5)