type="week" 是用于采集用户声明性选择“年+周”组合的语义化输入控件,值为 ISO 格式字符串(如"2026-W18"),不支持周数计算、日期转换或自动校验,仅适用于需用户明确指定某周的场景。

input 的 type="week" 是 HTML5 原生支持的语义化输入类型,专门用于让用户选择「某一年的第几周」,不是选日期、也不是选星期几,而是选 ISO 定义下的「年+周」组合(如 2026-W18)。它不用于统计周数,也不返回数字 1–53,而是一个格式固定的字符串值。
为什么 type="week" 不能直接拿来做周数统计
浏览器原生 week 输入框提交或读取的值形如 "2026-W18"(ISO 格式),不是整数。你无法靠它自动算出「今天是今年第几周」或「两个日期差多少周」——它只负责采集用户明确选定的一周,不参与计算。
- 表单提交时,
value是字符串,例如:"2026-W18",后端需手动解析年份和周数 - JS 读取
input.value得到的是字符串,不是new Date()对象,不能直接调用getDay()或toISOString() - 没有内置方法把
"2026-W18"转成日期范围(如 2026-04-27 至 2026-05-03),得自己写逻辑或依赖库 - Chrome 和 Safari 支持该控件但显示为文本框 + 日历弹窗;Firefox 当前(2026)仍不支持
week类型,会退化为普通文本框
week 输入框的正确使用场景
它适合明确需要用户「声明性选择一周」的业务,比如排班系统选「第 18 周值班」、课程表选「第 22 周教学安排」、报销系统填「费用发生于哪一周」——重点在「用户确认」而非「程序推算」。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 必须配合
name属性才能被表单提交,例如:<input name="report_week" type="week"> - 可设默认值,格式必须严格为
YYYY-W##,如:value="2026-W18";写成"2026-18"或"18"会被忽略 - 可用
min/max限制可选范围,值也须为YYYY-W##格式,例如:min="2026-W01" max="2026-W53" - 验证失败时(如空值或格式错误),
checkValidity()返回false,validationMessage会提示「请填写有效的周」
想统计周数?别用 type="week",改用函数
真正做周数计算,应放弃 input[type=week],转向 JS 或后端函数:
立即学习“前端免费学习笔记(深入)”;
- JS 中可用
Intl.DateTimeFormat提取 ISO 周数:new Intl.DateTimeFormat('en', {year: 'numeric', week: 'numeric'}).format(new Date())→"2026-W18" - MySQL 用
WEEK(date, 3)(周一为始,范围 1–53)或YEARWEEK(date, 3)获取整数结果 - PostgreSQL 用
EXTRACT(WEEK FROM date),默认按周日为始;加ISODOW可适配 ISO - 注意:不同数据库对「第 1 周」定义不同——有的要求该周含 1 月 4 日,有的看是否过半数日期属本年,跨年周(如 2025-12-29 是 2026-W01)最容易出错
真正容易被忽略的是:前端 week 输入框只是个「字符串采集器」,它不校验该周是否存在(比如 2026-W54 在多数年份无效),也不保证用户选的周和当前日期逻辑一致。所有业务级校验——比如「不能选未来周」「不能选已关闭的周」——都得自己在 JS 或服务端补全。


















