import datetime
def get_weekly_mondays(start_date, end_date=None):
"""
计算从起始日期到结束日期的每周周一日期及对应的周数(按年计算)。
支持跨年周和53周的情况。
:param start_date: 起始日期,格式为 'YYYY-MM-DD'
:param end_date: 结束日期,格式为 'YYYY-MM-DD'(默认为当前日期)
:return: 字典,键为年份和周数(如 '2024-Week 1'),值为周一日期
"""
# 将字符串日期转换为 datetime.date 对象
start_date = datetime.datetime.strptime(start_date, '%Y-%m-%d').date()
# 如果未提供 end_date,则默认为当前日期
if end_date is None:
end_date = datetime.date.today()
else:
end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d').date()
# 初始化字典
weekly_mondays = {}
# 当前日期指针
current_date = start_date
# 找到起始日期的第一个周一
if current_date.weekday() != 0: # 0 表示周一
current_date += datetime.timedelta(days=(7 - current_date.weekday()))
# 逐周计算
while current_date <= end_date:
year = current_date.year
iso_year, iso_week, _ = current_date.isocalendar() # 获取ISO年份和周数
# 如果ISO年份与当前年份不一致,则说明是跨年周
if iso_year != year:
year = iso_year # 使用ISO年份
key = f"{year}-Week-{iso_week}"
weekly_mondays[key] = current_date.strftime('%Y-%m-%d')
current_date += datetime.timedelta(weeks=1)
return weekly_mondays
# 示例:计算从2024年1月1日到2025年12月31日的每周周一
start_date = '2024-01-30'
end_date = '2025-01-13'
weekly_mondays = get_weekly_mondays(start_date)
# 输出结果
for key, value in weekly_mondays.items():
print(f"{key}: {value}")
06-19
2379

07-19
502

11-19
1万+

07-08
2902

08-18