周数查询
日期
周数规则
第 2026 年 / 第 X 周
ISO 周/美式周/自定义周起
日期
周数规则
第 2026 年 / 第 X 周
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 周转化为具体的日历时间,确保里程碑节点清晰可追踪。
| 维度 | 本工具 | 竞品 A(timeanddate.com) | 传统方法(手动查日历) |
|---|---|---|---|
| 数据隐私 | 纯浏览器端计算,输入数据不上传服务器 | 需联网查询,输入数据经网络传输 | 完全离线,无数据泄露风险 |
| 处理速度 | 毫秒级响应,输入即出结果 | 依赖网络延迟,通常 1-3 秒 | 需逐日核对日历,耗时数分钟 |
| 离线可用 | 完全离线可用,无需网络 | 必须联网才能使用 | 完全离线,但需纸质日历 |
| 自定义周起始 | 支持周一/周日/自定义起始日 | 仅支持标准 ISO 周(周一始) | 需手动推算,不支持自定义 |
| 批量查询 | 支持连续年份/周数范围一次性输出 | 单次仅查询一个日期或周数 | 需逐周手工计算,效率极低 |
| 多标准支持 | 同时支持 ISO 8601、美式周、自定义周 | 仅支持 ISO 8601 标准 | 仅支持本地习惯(通常为周一始) |
| 平台限制 | 纯网页,任何设备浏览器均可使用 | 网页版需现代浏览器,部分功能需 JavaScript | 需持有纸质日历或电子日历软件 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 2023-12-31 | ISO 周:2024-W01(周一) 美式周:2023-W53(周日) 自定义周起(周一):2024-W01 | 典型场景:年末日期,ISO 周和美式周结果不同 |
| 2024-01-01 | ISO 周:2024-W01(周一) 美式周:2024-W01(周一) 自定义周起(周一):2024-W01 | 典型场景:新年第一天,三种算法结果一致 |
| 2024-02-29 | ISO 周:2024-W09(周四) 美式周:2024-W09(周四) 自定义周起(周一):2024-W09 | 边界 case:闰日,周数不受闰年影响 |
| 2025-12-31 | ISO 周:2026-W01(周三) 美式周:2025-W53(周三) 自定义周起(周一):2026-W01 | 边界 case:年末跨年,ISO 周归属下一年 |
| 2024-12-30 | ISO 周:2025-W01(周一) 美式周:2024-W53(周一) 自定义周起(周一):2025-W01 | 易错 case:周一可能属于前一年的最后一周 |
| 2024-09-01 | ISO 周:2024-W35(周日) 美式周:2024-W35(周日) 自定义周起(周一):2024-W35 | 典型场景:普通工作日,三种算法结果一致 |
| 2024-01-07 | ISO 周:2024-W01(周日) 美式周:2024-W02(周日) 自定义周起(周一):2024-W01 | 易错 case:周日是美式周下一周的开始 |
输入 2025-01-01,期望输出「第 1 周」输入 2025-01-01,实际输出「第 1 周(ISO)」或「第 0 周(美式)」ISO 8601 规定每年第一周必须包含该年第一个周四;1月1日若为周三,则属于前一年第53周。美式周则从1月1日开始算第1周。
选择「ISO 周」却期望周一为第一天ISO 周固定周一为每周第一天;美式周固定周日为第一天ISO 8601 定义周一为第1天,美式周(US week)周日为第1天。选错模式会导致周编号偏移1天。
自定义周起始日输入「8」或「0」输入 1(周一)到 7(周日)之间的整数工具只接受 1-7 作为星期编号(1=周一,7=周日)。0 或 8 会被视为无效输入,导致计算失败。
输入 1900-01-01 或 2100-12-31输入 1970-01-01 到 2099-12-31 之间的日期工具基于 Go 的 time 包实现,安全支持范围通常为 1970-2038(32位时间戳),但本工具扩展至 2099年。超出范围可能返回错误或错误结果。
看到输出「第53周」认为工具算错了检查年份:若该年1月1日为周四或12月31日为周四,则确实存在第53周ISO 周系统每年有52或53周,取决于该年1月1日的星期。例如2026年1月1日为周四,则2026有53周。
输入 2025/1/1 或 01-01-2025 或 2025.1.1输入 2025-01-01(四位年份-两位月份-两位日期)工具只接受 ISO 8601 日期格式 YYYY-MM-DD。斜杠、点号、或顺序颠倒都会被解析失败。
认为 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 周)及自定义周起始。不适用于跨年周数计算(需额外判断年份归属)。
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)}") # 53package 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)}`); // 537 个高频疑问