ISO 周数与周历

查某个日期是第几周,或者反过来查第几周的起止日期。用的是国际标准 ISO 8601:一周从周一算起,第 1 周是含 1 月 4 日的那一周。

也可以直接按下面的年和周两边对照。日期换成 12 月底或 1 月初时,周数可能跳到上一年或下一年,这是 ISO 规则本身决定的,不是算错。

规则和常见坑

ISO 8601 的两条规则:一周从周一开始,到周日结束;第 1 周是含 1 月 4 日的那一周,等价说法是「含当年第一个周四的那一周」。之所以用周四来定,是因为一周里必然有且只有一个周四落在某一年内,周四归属哪一年,这一周就归哪一年。这样跨年的那几天就有了明确归属,不会出现「一年的最后几天算第 1 周还是第 53 周」的争议。

一年是 52 周还是 53 周由 1 月 1 日的星期决定:1 月 1 日是周四,这一年有 53 周;1 月 1 日是周三且这一年是闰年,也有 53 周;其他情况都是 52 周。所以 2020 年和 2026 年都是 53 周,而它们的前后两年往往是 52 周。

最容易踩的坑是年初年末。比如 2026 年 1 月 1 日是周四,那天属于 2026 年第 1 周,这一周从 2025 年 12 月 29 日(周一)开始。反过来 2027 年 1 月 1 日是周五,它属于 2026 年第 53 周,也就是 2027 年的头三天还挂在 2026 年的最后一周里。

不同系统给出的「第几周」经常对不上,因为算法不一样。ISO 是本周周一落在哪一年就归哪一年,从 1 月 1 日起每 7 天算一周是另一种常见做法(比如第 1 周是 1 月 1 日到 7 日),得到的编号在年初年末能差一周。在 Excel 里 WEEKNUM(日期, 21) 才是 ISO 口径,默认的 WEEKNUM(日期) 是周日为一周开始,和 ISO 不一样。数据库和编程语言里通常叫 isoweek 或 ISO week date,和这里的结果一致。

国内日常说的「第几周」多是简单算法或学校和公司的校历口径,如果要和 ISO 周对齐,会用「2026-W01」这种写法把年份一起写上,避免只写周数产生歧义。