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

ISO年度周数编码实现:第53周边界异常问题及公式修正咨询

解决方案

原公式的默认计算前提为:

  • doy 是当年的日序(1月1日为1,平年12月31日为365、闰年为366)
  • dow 是ISO标准星期值(周一为1,周日为7,若你的实现里周日为1/0,需要先做转换)
  • div 为向下取整的整数除法

你遇到的两个边界问题是因为原公式仅输出了相对于当前年的周数,没有处理跨年度的ISO周归属逻辑,补充以下规则即可解决:

1. 先实现单年是否存在53周的判断逻辑

满足以下任意一个条件的年份,存在53个ISO周:

  • 该年的1月1日为星期四
  • 该年为闰年,且1月1日为星期三
    你可以将该逻辑封装为工具函数 has_53_weeks(year),返回布尔值即可。

2. 对初始计算的周数做边界修正

# 计算初始周数
woy = (10 + doy - dow) // 7
current_year = 输入日期的年份

# 处理年初日期算成0周的问题:归属上一年最后一周
if woy == 0:
    current_year -= 1
    woy = 53 if has_53_weeks(current_year) else 52

# 处理年末日期算成53周的问题:判断是否归属下一年第1周
elif woy >= 53:
    if not has_53_weeks(current_year):
        woy = 1
        current_year += 1

验证示例

  • 2021年1月1日:doy=1,dow=5(周五),初始woy=(10+1-5)//7=0,调用has_53_weeks(2020)返回True(2020是闰年且1月1日为周三),修正后woy=53、归属2020年,符合预期。
  • 2019年12月31日:doy=365,dow=2(周二),初始woy=(10+365-2)//7=53,调用has_53_weeks(2019)返回False,修正后woy=1、归属2020年,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:00:04