从Python中的日期减去一个月?

lde*_*ina 8 python datetime

我需要从任何日期开始上个月的第一天.我知道我可以使用monthdelta(datetime(2010,3,30), -1)上个月,但它不会在第一天返回.

mit*_*ghi 5

这可以通过首先计算当月的第一天(或任何给定的date),然后用datetime.timedelta(days = 1)减去它来得出上个月的最后一天。

为了演示,下面是示例代码:

import datetime

def get_lastday(current):
    _first_day = current.replace(day=1)
    prev_month_lastday = _first_day - datetime.timedelta(days=1)
    return prev_month_lastday.replace(day=1)
Run Code Online (Sandbox Code Playgroud)

  • 被否决,因为当前答案给出的是上个月的*最后*天,而不是*第一天* (2认同)

Rah*_*K P 5

尝试这样。通过使用datetimedatetutil.

(如果datetutil无法安装pip install python-dateutil

In [1]: from datetime import datetime
In [2]: import dateutil.relativedelta
In [3]: today_date = datetime.now().date()
In [4]: today_date
Out[1]: datetime.date(2016, 7, 5)
In [5]: last_month = today_date - dateutil.relativedelta.relativedelta(months=1)
In [6]: last_mont_first_date = last_month.replace(day=1)
In [7]: last_mont_first_date
Out[2]: datetime.date(2016, 6, 1)
Run Code Online (Sandbox Code Playgroud)

输入:

datetime.date(2016, 7, 5)
Run Code Online (Sandbox Code Playgroud)

输出

datetime.date(2016, 6, 1)
Run Code Online (Sandbox Code Playgroud)


Jos*_*ilo 4

尝试这个 :

from datetime import date
d = date.today()
d.replace(
    year=d.year if d.month > 1 else d.year - 1,
    month=d.month - 1 if d.month > 1 else 12,
    day=1
)
Run Code Online (Sandbox Code Playgroud)