文章
ISO周数是怎么算的
在欧洲不少地方,一场会议可以被安排在“第27周”而不附带任何具体日期。把这个问题分别抛给一张电子表格、一款美式日历应用和一本德国纸质日程本,得到的答案可能相差一周,有时甚至两周。周数编号从来不是单一惯例,而是好几种并存,ISO 8601定义的是其中不含歧义的那一种:一周从星期一开始,第1周以1月的第一个星期四为锚点。这种精确性的代价是,第1周有可能从12月就开始,而有些年份会数到第53周。
两条规则定义了ISO周
ISO 8601的一周从星期一开始,一周内各天编号为1(星期一)到7(星期日)。某年的第1周,是包含1月第一个星期四的那一周,等价地说,也是包含1月4日的那一周。这里有个值得记住的推论:第1周的七天里至少有四天属于新的一年,所以一周的大多数天数决定了这一周计入哪一年。写全了,一个ISO周日期看起来像2026-W27-5:2026年、第27周、第5天,也就是星期五。不带连字符的紧凑写法(2026W275)也存在,但日程表和项目计划几乎总是使用带连字符的写法。
周所属年份不等于日历年份
由于第1周以第一个星期四为锚点,12月末最多三天可能已经属于下一年的第1周,而1月初最多三天可能仍属于上一年的最后一周。眼前这个年份交界正好是活生生的例子:2025年12月29日星期一到2026年1月4日星期日构成同一个星期,即2026-W01,所以2025年12月29日、30日和31日在周数编号上都属于2026年。这种分裂正是一类经典软件缺陷的根源。日期格式化工具会区分日历年(Java风格模式中的yyyy)和基于周的年份(YYYY),误用YYYY输出的代码会在新年前后的几天里显示错误的年份。这一类缺陷曾在2014年底出现在Twitter的日期显示上,而且每年12月都会在某处重新冒出来。

有些年份有53周
365天分成52周还多出一天,所以周数没法固定在一个稳定的节奏上。按ISO规则,一个年份在它从星期四开始时会有53周,在它是闰年且从星期三开始时也会有53周。这种情况每400年出现71次,大约每六年一次。2026年就是其中之一:它从星期四开始,所以从2026-W01一直排到2026-W53,最后一周从2026年12月28日星期一延伸到2027年1月3日星期日。上一个53周年份是2020年;接下来的是2032年和2037年。做薪资和零售计划的人对这些年份很熟悉,因为多出来的一个编号周,可能意味着在假设只有52周的预算里多出一次发薪或多一个报告期。

其他体系的数法不一样
ISO 8601并不是唯一在用的惯例。北美的日历通常把一周的起点定在星期日,并把包含1月1日的那一周称为第1周,不管1月1日是星期几;这样一来第一周可能只有一天长。电子表格把这两个世界都摆在了面前:Excel的WEEKNUM函数默认使用基于星期日的计数方式,而ISOWEEKNUM实现的是ISO规则,两者在很多日期上的结果并不一致。编程语言也把同样的陷阱藏在一个函数里:光是strftime就提供了%U(基于星期日)、%W(基于星期一)和%V(ISO)三种。所以“第27周”这个说法本身并不精确,除非你知道它出自哪种方案。只要周数会跨越国界、公司或代码库,就应该明确写出ISO,或者附上具体的日期范围。
不用挂历也能查到周数
对于重要的日期,计算比在日历上数格子更可靠。我们的周数工具会为任意日期返回ISO周数,并给出它所覆盖的星期一到星期日范围;星期几工具会告诉你任意日期(无论过去还是未来)落在ISO七天中的哪一天。两者都完全在你的浏览器里运行:你输入的日期只在你的设备上处理,不会发送到任何地方。如果你需要两个便于记忆的锚点,这就够了:1月4日永远在第1周里,12月28日永远在当年的最后一周里。
本文涉及的工具
常见问题
为什么Excel和我的日历应用显示的周数不一样?
几乎可以肯定是它们用了不同的惯例。Excel的WEEKNUM默认使用基于星期日起始的计数,包含1月1日的那一周就是第1周;而ISOWEEKNUM,以及大多数欧洲纸质日程本和设置为ISO模式的日历应用,用的是以第一个星期四为锚点的星期一起始规则。全年结果都可能相差一周,而在新年前后,同一个日期在一个体系里可能是第52周或第53周,在另一个体系里却是第1周。检查一下每个应用里的周数设置,当别人需要复现你给出的数字时,优先选择ISO方案。
到底哪些国家真的在用周数?
在欧洲不少地方,周数是日常商务语言的一部分。德国和奥地利按Kalenderwoche(KW)做计划,北欧国家、荷兰和捷克也习惯用周数来安排会议、生产排期和交付;当地印刷的日程本上标的就是ISO周数。在北美和亚洲大部分地区,周数在物流和制造业之外很少出现,即便出现,往往遵循的是基于星期日的计数方式。这就是为什么“第34周交付”这种说法,最好还是附上明确的日期区间才稳妥。
会有第54周吗?
在ISO 8601里不会:一个ISO年份恰好是52周或53周,而且始终是完整的星期一到星期日整周。在年份边界处切分周的体系,数字可以更高。在以1月1日所在周为第1周的星期日起始计数法里,一个从星期六开始的闰年会把366天摊到54个不完整的周里:2000年就是这样的例子,Excel的WEEKNUM对2000年12月31日返回的结果是54,下一次出现在2028年。如果软件某天给你显示第54周,你看到的是这种惯例,而不是ISO。