You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写函数获取带年份的上周周数(周起始为周一)

实现返回带年份的上周周数函数

要实现符合你需求的函数,核心是基于**ISO周(周一至周日)**的规则计算,同时妥善处理跨年场景,具体逻辑如下:

  • 先获取目标日期的ISO年份和周数
  • 如果当前周数大于1,上周就是当前年份的周数减1
  • 如果当前是当年第1周,上周就是上一年的最后一个ISO周

完整代码

import datetime

def get_last_week_str(target_date=None):
    # 默认使用当前日期,也可传入指定日期自定义计算
    if target_date is None:
        target_date = datetime.date.today()
    
    iso_year, iso_week, _ = target_date.isocalendar()
    
    if iso_week > 1:
        last_year = iso_year
        last_week = iso_week - 1
    else:
        # 处理跨年场景:取上一年的最后一周
        last_year = iso_year - 1
        # 每年12月28日必然属于当年最后一周,用它获取最后周数
        last_week = datetime.date(last_year, 12, 28).isocalendar()[1]
    
    # 格式化为「YYYY_WXX」格式,周数补两位零
    return f"{last_year}_W{last_week:02d}"

测试验证

几个典型场景的结果:

  • 当日期为2023年5月8日(周一,属于2023_W19),调用函数返回2023_W18,完全符合你的示例需求
  • 当日期为2024年1月1日(周一,属于2024_W01),函数返回2023_W52(2023年最后一周)
  • 当日期为2023年12月24日(周日,属于2023_W52),函数返回2023_W51

为什么不直接减7天?

直接给当前日期减7天的方式存在漏洞:比如2024年1月1日(周一)减7天得到2023年12月25日,而这一天属于2024年第1周,会错误返回2024_W01,而非我们需要的2023_W52。通过ISO周数的逻辑计算能避免这类问题,更准确贴合需求。

内容的提问来源于stack exchange,提问作者lucy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:35:36