每五天更改一个未来日期

Change a future date every five days

我正在 Django 开发一个销售点应用程序,客户在其中预订产品并在 45 天内交付。我可以使用以下方式在预订时获得交货日期:

from datetime import datetime, timedelta

DELIVERY_IN_DAYS = 45

delivery_on = datetime.today() + timedelta(days=DELIVERY_IN_DAYS)
delivery_on = delivery_on.strftime('%Y-%m-%d')

现在我希望 delivery_on 在 5 天内保持不变并在第 6 天更改。我可以在不使用后台芹菜作业的情况下完成吗?

提前致谢。

是的,我们可以确定一个日期模天数:

from datetime import date, timedelta

today = date.today()

offset_date = date(2000, 1, 1)
dt = today - offset_date
delivery_on = today + timedelta(days=DELIVERY_IN_DAYS - dt.days % 5)

我们可以将逻辑包装到一个函数中:

def to_deliver_day(day):
    offset_date = date(2000, 1, 1)
    dt = day - offset_date
    return day + timedelta(days=DELIVERY_IN_DAYS - dt.days % 5)

如果我们在 7 月 1 日至 7 月 10 日期间调用此逻辑,我们将得到:

>>> to_deliver_day(date(2021, 7, 1))
datetime.date(2021, 8, 13)
>>> to_deliver_day(date(2021, 7, 2))
datetime.date(2021, 8, 13)
>>> to_deliver_day(date(2021, 7, 3))
datetime.date(2021, 8, 13)
>>> to_deliver_day(date(2021, 7, 4))
datetime.date(2021, 8, 18)
>>> to_deliver_day(date(2021, 7, 5))
datetime.date(2021, 8, 18)
>>> to_deliver_day(date(2021, 7, 6))
datetime.date(2021, 8, 18)
>>> to_deliver_day(date(2021, 7, 7))
datetime.date(2021, 8, 18)
>>> to_deliver_day(date(2021, 7, 8))
datetime.date(2021, 8, 18)
>>> to_deliver_day(date(2021, 7, 9))
datetime.date(2021, 8, 23)
>>> to_deliver_day(date(2021, 7, 10))
datetime.date(2021, 8, 23)

通过不同地设置 offset_date,您可以更改结果“跳跃”的时刻