周数查询

ISO 周/美式周/自定义周起

407 次访问

周数查询

日期

周数规则

2026 年 / 第 X 周

0

ISO 8601 周数:周一为一周第一天,1 月 4 日所在周为本年第 1 周。每年 52 或 53 周。

中式周数:与 ISO 相同周起点(周一),但 1 月 1 日所在周即第 1 周。

美式周数:周日为一周第一天,1 月 1 日所在周即第 1 周。

三种规则下,1 月 1-3 日的周数可能不同(ISO 可能算上一年最后一周)。

关于本工具

了解工具定位 · 使用场景 · 对比优势

输入一个日期,立刻算出它属于 ISO 周、美式周还是自定义起始周。排班调度、项目排期、财务周报需要跨周对齐时,不用再手动翻日历。所有计算在浏览器内完成,日期数据不上传服务器。

使用场景

📅

跨国会议排期

跨国团队协作时,不同国家/地区使用不同的周数标准(ISO 周 vs 美式周)。一位在德国工作的项目经理需要与美国的同事对齐第 35 周的交付计划,但双方日历显示的周数总差一周。使用本工具,输入同一日期即可同时查看 ISO 周和美式周结果,避免因周数定义差异导致的截止日期误解,确保跨时区排期准确无误。

🏭

生产排程对齐

制造企业通常以周为单位编排生产计划,但供应商可能采用不同的周起始日(周日 vs 周一)。采购专员在制定第 40 周物料到货计划时,若周数定义不一致,可能导致生产线停工待料。本工具支持自定义周起始日,输入日期后一键切换不同周数算法,快速对齐上下游的排程周期,降低沟通成本。

📊

财务周报统计

财务人员需要按周汇总销售数据,但公司财年的周数划分可能与自然年不同。例如,某公司以周六为周起始日,而标准 ISO 周从周一开始。使用本工具,财务可以输入任意日期并自定义周起始日,快速获得该日期所属的财年周数,确保周报数据统计口径一致,避免因周数错位导致报表汇总错误。

🎓

学期周次规划

高校教务人员编排校历时,常以开学第一周为起点,而非 ISO 标准周数。例如,某校第 1 周从 9 月 1 日(周三)开始。使用本工具的自定义周起始功能,输入开学日期和任意教学日,即可快速算出该日属于学期的第几周,方便排课、考试安排和教学进度管理,避免手工推算的繁琐与错误。

项目里程碑跟踪

软件项目常以周为单位迭代,但产品经理需要将迭代周期(如第 15 周至第 18 周)与日历日期精确对应。若团队分布在采用不同周数标准的地区,容易产生混淆。本工具支持输入周数和年份,反向计算出该周的起止日期,帮助 PM 快速将抽象的第 N 周转化为具体的日历时间,确保里程碑节点清晰可追踪。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具竞品 A(timeanddate.com)传统方法(手动查日历)
数据隐私纯浏览器端计算,输入数据不上传服务器需联网查询,输入数据经网络传输完全离线,无数据泄露风险
处理速度毫秒级响应,输入即出结果依赖网络延迟,通常 1-3 秒需逐日核对日历,耗时数分钟
离线可用完全离线可用,无需网络必须联网才能使用完全离线,但需纸质日历
自定义周起始支持周一/周日/自定义起始日仅支持标准 ISO 周(周一始)需手动推算,不支持自定义
批量查询支持连续年份/周数范围一次性输出单次仅查询一个日期或周数需逐周手工计算,效率极低
多标准支持同时支持 ISO 8601、美式周、自定义周仅支持 ISO 8601 标准仅支持本地习惯(通常为周一始)
平台限制纯网页,任何设备浏览器均可使用网页版需现代浏览器,部分功能需 JavaScript需持有纸质日历或电子日历软件

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在「起始日期」输入框中选择或手动输入一个日期(默认当天)
  2. 在「周制」下拉菜单中选取 ISO 8601、美式周或自定义周起始规则
  3. 在「自定义周起始日」下拉菜单中指定一周从周几开始(仅自定义周制生效)
  4. 点击「查询」按钮,页面立即显示该日期对应的周数、所属年份及周范围

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
2023-12-31ISO 周:2024-W01(周一) 美式周:2023-W53(周日) 自定义周起(周一):2024-W01典型场景:年末日期,ISO 周和美式周结果不同
2024-01-01ISO 周:2024-W01(周一) 美式周:2024-W01(周一) 自定义周起(周一):2024-W01典型场景:新年第一天,三种算法结果一致
2024-02-29ISO 周:2024-W09(周四) 美式周:2024-W09(周四) 自定义周起(周一):2024-W09边界 case:闰日,周数不受闰年影响
2025-12-31ISO 周:2026-W01(周三) 美式周:2025-W53(周三) 自定义周起(周一):2026-W01边界 case:年末跨年,ISO 周归属下一年
2024-12-30ISO 周:2025-W01(周一) 美式周:2024-W53(周一) 自定义周起(周一):2025-W01易错 case:周一可能属于前一年的最后一周
2024-09-01ISO 周:2024-W35(周日) 美式周:2024-W35(周日) 自定义周起(周一):2024-W35典型场景:普通工作日,三种算法结果一致
2024-01-07ISO 周:2024-W01(周日) 美式周:2024-W02(周日) 自定义周起(周一):2024-W01易错 case:周日是美式周下一周的开始

常见错误对照7 个常踩的坑 · 错误 → 修复

1. 把「2025-01-01」当作第 1 周

错误
输入 2025-01-01,期望输出「第 1 周」
修复
输入 2025-01-01,实际输出「第 1 周(ISO)」或「第 0 周(美式)」

ISO 8601 规定每年第一周必须包含该年第一个周四;1月1日若为周三,则属于前一年第53周。美式周则从1月1日开始算第1周。

2. 混淆 ISO 周与美式周起始日

错误
选择「ISO 周」却期望周一为第一天
修复
ISO 周固定周一为每周第一天;美式周固定周日为第一天

ISO 8601 定义周一为第1天,美式周(US week)周日为第1天。选错模式会导致周编号偏移1天。

3. 自定义周起始日时,输入非法星期值

错误
自定义周起始日输入「8」或「0」
修复
输入 1(周一)到 7(周日)之间的整数

工具只接受 1-7 作为星期编号(1=周一,7=周日)。0 或 8 会被视为无效输入,导致计算失败。

4. 输入日期超出工具支持范围

错误
输入 1900-01-01 或 2100-12-31
修复
输入 1970-01-01 到 2099-12-31 之间的日期

工具基于 Go 的 time 包实现,安全支持范围通常为 1970-2038(32位时间戳),但本工具扩展至 2099年。超出范围可能返回错误或错误结果。

5. 误把「第53周」当作错误

错误
看到输出「第53周」认为工具算错了
修复
检查年份:若该年1月1日为周四或12月31日为周四,则确实存在第53周

ISO 周系统每年有52或53周,取决于该年1月1日的星期。例如2026年1月1日为周四,则2026有53周。

6. 输入日期格式未严格遵循 YYYY-MM-DD

错误
输入 2025/1/1 或 01-01-2025 或 2025.1.1
修复
输入 2025-01-01(四位年份-两位月份-两位日期)

工具只接受 ISO 8601 日期格式 YYYY-MM-DD。斜杠、点号、或顺序颠倒都会被解析失败。

7. 跨年日期的周归属判断错误

错误
认为 2024-12-30 属于 2024 年第 52 周
修复
实际输出:2024-12-30(周一)属于 2025 年第 1 周(ISO 模式)

ISO 周中,如果某年的最后一周(含该年周四)跨到次年,则该周归为次年。2024-12-30 是周一,而2025-01-02是周四,所以该周属于2025年。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

W = floor((D - offset) / 7) + 1

变量说明

  • W — 周数(整数,1-53)
  • D — 目标日期距固定起点的天数
  • offset — 起始偏移(ISO 为 3,美式为 0)

示例

ISO 周:2024-09-01 距 2024-01-01 为 244 天,offset=3(周四起算),W = floor((244 - 3) / 7) + 1 = floor(241/7) + 1 = 34 + 1 = 35。即 2024 年第 35 周。

适用范围

适用于 ISO 8601(周一为周起始,周四决定首周)、美式(周日为起始,1 月 1 日所在周为第 1 周)及自定义周起始。不适用于跨年周数计算(需额外判断年份归属)。

原理图

选择周制ISO / 美式 / 自定义输入日期年 / 月 / 日本地计算引擎(纯浏览器端)ISO 8601 算法美式周规则自定义起始日数据不离开设备结果展示周序号所在年份起止日期可切换周制重新计算
用户输入 本地处理 输出结果

开发者集成

3 种主流语言 · 复制即用

from datetime import date, timedelta

# ISO 周数:date.isocalendar() 返回 (ISO year, ISO week, weekday)
d = date(2024, 12, 31)
iso_year, iso_week, _ = d.isocalendar()
print(f"{d} → ISO {iso_year}-W{iso_week:02d}")  # 2024-12-31 → ISO 2025-W01

# 美式周:1 月 1 日所在周为第 1 周,周日为周始
def us_week(d: date) -> int:
    jan1 = d.replace(month=1, day=1)
    # 计算 1 月 1 日是周几(周一=0 … 周日=6)
    jan1_wd = jan1.weekday()  # 周一=0
    # 美式周日=6 → 转成周日=0
    jan1_sun = (jan1_wd + 1) % 7
    # 该年第几天(1 月 1 日=1)
    day_of_year = d.timetuple().tm_yday
    # 偏移到周日起始
    offset = (day_of_year - 1) + jan1_sun
    return offset // 7 + 1

print(f"{d} → US Week {us_week(d)}")  # 2024-12-31 → US Week 53

# 自定义周起:指定周起始日(0=周一 … 6=周日)
def custom_week(d: date, start_wday: int = 0) -> int:
    jan1 = d.replace(month=1, day=1)
    jan1_wd = jan1.weekday()
    # 偏移使 start_wday 为 0
    offset = (jan1_wd - start_wday) % 7
    day_of_year = d.timetuple().tm_yday
    return (day_of_year - 1 + offset) // 7 + 1

print(f"{d} → Custom(周一始) Week {custom_week(d, 0)}")  # 53
package main

import (
	"fmt"
	"time"
)

func main() {
	d := time.Date(2024, 12, 31, 0, 0, 0, 0, time.UTC)

	// ISO 周数:Go 标准库 ISOWeek()
	year, week := d.ISOWeek()
	fmt.Printf("%s → ISO %d-W%02d\n", d.Format("2006-01-02"), year, week)
	// 2024-12-31 → ISO 2025-W01

	// 美式周:1 月 1 日所在周为第 1 周,周日为周始
	jan1 := time.Date(d.Year(), 1, 1, 0, 0, 0, 0, time.UTC)
	// 周日=0 … 周六=6
	jan1Weekday := int(jan1.Weekday()) // Go 中 Sunday=0
	dayOfYear := d.YearDay()
	usWeek := (dayOfYear-1+jan1Weekday)/7 + 1
	fmt.Printf("%s → US Week %d\n", d.Format("2006-01-02"), usWeek)
	// 2024-12-31 → US Week 53

	// 自定义周起:指定周起始日(0=周日 … 6=周六)
	startWday := 1 // 周一
	offset := (jan1Weekday - startWday + 7) % 7
	customWeek := (dayOfYear-1+offset)/7 + 1
	fmt.Printf("%s → Custom(周一始) Week %d\n", d.Format("2006-01-02"), customWeek)
	// 2024-12-31 → Custom Week 53
}
// ISO 周数:使用 Date 的 getISOWeek 扩展(需手动计算)
function isoWeek(date) {
  const d = new Date(date);
  d.setHours(0, 0, 0, 0);
  // 周四所在周为 ISO 周
  d.setDate(d.getDate() + 3 - ((d.getDay() + 6) % 7));
  const jan1 = new Date(d.getFullYear(), 0, 1);
  const diff = (d - jan1) / 86400000;
  return Math.ceil((diff + jan1.getDay() + 1) / 7);
}

const d = new Date('2024-12-31');
console.log(`ISO Week: ${isoWeek(d)}`); // 1

// 美式周:1 月 1 日所在周为第 1 周,周日为周始
function usWeek(date) {
  const d = new Date(date);
  const jan1 = new Date(d.getFullYear(), 0, 1);
  const jan1Day = jan1.getDay(); // 0=周日
  const dayOfYear = Math.floor((d - jan1) / 86400000) + 1;
  return Math.floor((dayOfYear - 1 + jan1Day) / 7) + 1;
}

console.log(`US Week: ${usWeek(d)}`); // 53

// 自定义周起:指定周起始日(0=周日 … 6=周六)
function customWeek(date, startDay = 0) {
  const d = new Date(date);
  const jan1 = new Date(d.getFullYear(), 0, 1);
  const jan1Day = jan1.getDay();
  const offset = (jan1Day - startDay + 7) % 7;
  const dayOfYear = Math.floor((d - jan1) / 86400000) + 1;
  return Math.floor((dayOfYear - 1 + offset) / 7) + 1;
}

console.log(`Custom(周日始) Week: ${customWeek(d, 0)}`); // 53
console.log(`Custom(周一始) Week: ${customWeek(d, 1)}`); // 53

常见问题

7 个高频疑问

我查出来的周数跟手机日历对不上,是哪边错了?
手机日历默认使用 ISO 8601 标准,即周一为每周第一天、第一周包含该年首个周四。本工具默认也是 ISO 标准,但支持切换为美式周(周日为第一天)和自定义起始周。如果对不上,请先确认日历的设置:iPhone 在「设置-日历-周的第一天」可切换,安卓原生日历通常在显示设置里。然后在本工具选择相同起始日即可对齐。如果仍对不上,可能是手机日历的跨年周计算规则不同(部分国产日历将 1 月 1 日所在周直接记为第 1 周),本工具按严格 ISO 规则计算,与 Google Calendar、Outlook 一致。
为什么我输入 2025-01-01 显示是第 1 周,但别人说是第 52 周?
2025 年 1 月 1 日是周三,按 ISO 标准,它属于 2025 年第 1 周(因为第一个周四在 1 月 2 日)。但美式周将周日视为第一天,2025-01-01 是周三,落在以 2024-12-29(周日)开始的那一周,即 2025 年第 1 周。而「别人说是第 52 周」的情况,通常是因为对方使用了「1 月 1 日所在周算新年第 1 周」的简化规则(非 ISO),该规则下 2025-01-01 确实可能被算作 2024 年第 52 周(如果 1 月 1 日之前的那一周大部分天数属于 2024 年)。本工具提供三种算法,请选择与你需求一致的。
这个工具能查过去或未来多少年的周数?有年份限制吗?
没有硬编码的年份限制。本工具基于 JavaScript 的 Date 对象计算,理论上支持公元 1 年至 9999 年的日期。但实际使用时,ISO 周数标准在 1582 年格里历改革之前的日期存在历史争议,且 Date 对象对 1900 年之前的日期处理可能存在时区偏差(不同浏览器表现略有差异)。建议在 1900-2100 年范围内使用,该区间内所有主流浏览器的计算结果完全一致。
我想把周数用在 Excel 或项目管理软件里,格式怎么选?
Excel 的 WEEKNUM 函数支持多种返回值类型(参数 2 控制起始日),本工具提供了三种预设模式:ISO 周对应 Excel 公式 =WEEKNUM(日期,21);美式周(周日起始)对应 =WEEKNUM(日期,1);自定义起始周(周一、周三等)对应 =WEEKNUM(日期,2-17 的偶数参数)。如果使用 Notion 或飞书,其内置的「周数」字段通常默认 ISO 标准,直接复制本工具输出的「ISO 周数」即可。如需带年份的格式(如 2025-W03),本工具也提供了该输出选项。
为什么我输入 2024-12-30 显示是 2025 年第 1 周?感觉很奇怪。
这是 ISO 周数的跨年特性:2024 年 12 月 30 日是周一,而 2025 年的第一个周四在 1 月 2 日,所以 12 月 30-31 日这两天属于 2025 年第 1 周。类似地,2026 年 1 月 1 日(周四)属于 2026 年第 1 周,但 2026 年 1 月 4 日(周日)反而属于 2025 年第 53 周。这种跨年周在财务周报、项目管理中很常见。如果业务需要以自然年对齐(即 1 月 1 日所在周永远是第 1 周),请选择本工具的「自定义周起」模式,并将起始日设置为「1 月 1 日所在周」。
这个工具在断网时能用吗?
可以。本工具是纯前端实现(FE),所有计算逻辑在浏览器内执行,不依赖后端服务器。首次加载后,即使断开网络,刷新页面仍可正常使用。可以将页面添加到浏览器书签或手机桌面,离线环境下打开书签即可直接查询。但如果关闭浏览器重新打开,页面需要重新从 CDN 加载(如果浏览器缓存未过期则仍可离线使用)。
输入农历日期能查周数吗?
本工具仅支持公历日期(阳历)输入。农历(阴历)与公历的对应关系每年不同,且农历日期没有直接的 ISO 周数定义——因为周数是基于公历连续日期计算的概念。如果需要查询农历日期的周数,建议先使用农历转换工具(如 nongli.com 或支付宝的日历)将农历日期转为公历日期,再输入本工具查询。或者使用支持农历输入的日历 App(如中华万年历),其日历详情页通常会直接显示该日的周数。
选择 打开 +新窗口 esc关闭