周数计算器
ISO 8601 周数系统详解
ISO 8601 定义的国际标准周数系统:每周从周一开始到周日结束,每年的第一周(W01)是包含 1 月 4 日的那一周(等价于包含当年第一个周四的周)。一年有 52 或 53 周。ISO 周年可能与日历年不同——12 月 29–31 日可能属于下一年的 W01,1 月 1–3 日可能属于上一年的 W52/53。
如果 1 月 1 日是周五、周六或周日,按 ISO 标准它属于上一年的最后一周。例如 2000 年 1 月 1 日是周六,属于 1999 年的第 52 周。这确保了 ISO 系统中不存在"不完整周"。
当 1 月 1 日是周四,或闰年的 1 月 1 日是周三时,该年有 53 周(约每 5-6 年出现一次)。近年:2004、2009、2015、2020、2026、2032、2037。
各国/地区周数差异
欧盟、英国、大部分亚洲国家、澳大利亚、南美洲等 150+ 国家使用 ISO 8601 周数系统。这是国际贸易和制造业的标准。
美国和加拿大使用周日起始的周数系统,且第一周定义为包含 1 月 1 日的那一周。这导致一年可能有 53–54 个"周",且首周和末周可能不完整。
部分中东国家(如伊朗、阿富汗)使用周六起始。但在国际商务中逐步采用 ISO 标准。
商业应用场景
双周发薪(biweekly payroll)基于 ISO 周数排期。53 周年份会导致"额外发薪周"问题,财务部门需提前规划。4-4-5 零售财务日历也以周数为基础。
生产排期、交货窗口常用"W23 交付"格式。ISO 周数确保跨国供应链沟通无歧义。
2 周 Sprint 通常映射到 ISO 周数(如 W14-W15 为一个迭代),便于跨团队对齐和回顾。
周度销售报表以周数归档。53 周年份会影响同比(YoY)对比,需特别处理。
编程中的常见陷阱
Java/date-fns 中 YYYY 表示 ISO 周年,yyyy 表示日历年。在 12 月末/1 月初混用会导致年份错误——这是最常见的周数相关 Bug。
Python: isocalendar() 返回 (iso_year, week, weekday),注意用 iso_year 而非 year。JavaScript: Date 无原生 ISO 周数 API,需用 date-fns/Luxon 库。Excel: ISOWEEKNUM()(2013+)vs WEEKNUM()(美国制)。SQL: MySQL 用 WEEK(date, 3),PostgreSQL 的 EXTRACT(WEEK) 默认是 ISO。