如何在Django中基于当前日期获取上一个周日的日期
获取上一个周日的Python实现
嘿,这里有两种简洁的Python实现方案,帮你从当前日期获取上一个周日的日期,完全匹配你给出的示例场景(当前日期09/11/2021,对应上一个周日31/10/2021)👇
方法一:用weekday()计算(基于周一为起始的星期规则)
datetime.date.weekday()会返回0(周一)到6(周日)的数值。我们可以根据当前日期的星期数,计算需要往前推的天数:
import datetime today = datetime.date.today() # 计算距离上一个周日的天数:非周日时,推 (当前星期数+1) 天;周日时推7天 days_to_subtract = (today.weekday() + 1) % 7 if days_to_subtract == 0: days_to_subtract = 7 last_sunday = today - datetime.timedelta(days=days_to_subtract) print(last_sunday)
方法二:用isoweekday()计算(更贴近日常认知)
datetime.date.isoweekday()返回1(周一)到7(周日)的数值,这个逻辑更符合我们对星期的常规理解,代码可读性更高:
import datetime today = datetime.date.today() # 非周日时,推当前星期数天;周日时推7天(避免返回当天) days_to_subtract = today.isoweekday() if today.isoweekday() != 7 else 7 last_sunday = today - datetime.timedelta(days=days_to_subtract) print(last_sunday)
验证你的示例场景
如果手动指定today为你给出的日期:
today = datetime.date(2021, 11, 9)
运行任意一段代码,都会输出2021-10-31,和预期结果完全一致。
补充说明
- 两种方法都能正确处理今天就是周日的情况:比如如果今天是2021年11月7日(周日),代码会返回上一个周日(2021年10月31日),而不是当天。
- 如果你需要在今天是周日时返回当天,可以简化
days_to_subtract的逻辑为(today.weekday() + 1) % 7(不需要额外判断),这样周日时会减0天,直接返回当前日期。
内容的提问来源于stack exchange,提问作者VEERA BABU
相关产品推荐
相关产品推荐

