您可以使用datetime.datetime 和datetime.timedelta
from datetime import datetime, timedelta
def get_x_days_ago(x, date=None):
if date is None:
date = datetime.now()
return date - timedelta(days=x)
print(get_x_days_ago(1)) # 2021-04-26 15:43:53.448687
print(get_x_days_ago(365, datetime(2019, 1, 1))) # 2018-01-01 00:00:00
如果你想assert 使用datetime.datetime 对象的结果。例如,断言“一天前”结果是否与一天前的datetime 相同。
assert get_x_days_ago(1).replace(hour=0, minute=0, second=0, microsecond=0) == datetime(2021, 4, 26)
如果需要,return 语句可以改为
return (date - timedelta(days=x)).replace(hour=0, minute=0, second=0, microsecond=0)
在您的原始问题预编辑中,您键入带注释的 datetime 作为 date 的类型以及返回类型。如果您不关心时间部分,则可以改为传递 datetime.date 对象,而不必处理 datetime.replace 方法。 换句话说,代码变成了
from datetime import date, timedelta
def get_x_days_ago(x, date_given=None):
if date_given is None:
date_given = date.today()
return date_given - timedelta(days=x)
print(get_x_days_ago(1)) # this is of `datetime.date` type
assert get_x_days_ago(1) == date(2021, 4, 26)
print(get_x_days_ago(365, date(2019, 1, 1))) # so is this