HTML5 date 输入控件强制使用 ISO 8601 格式 YYYY-MM-DD,提交和 JS 赋值均须严格遵守,不支持自定义格式;初始 value 属性或 el.value 必须为该格式,否则无效;显示样式与 locale 无关,时区语义需额外处理。
HTML5 中的日期输入控件 本身不定义“格式写法”,它只规定了用户交互行为和提交时的标准化字符串格式——这个格式是固定的,不能自定义。
YYYY-MM-DD
无论用户在日历控件里怎么选、本地系统用的是“2025/3/15”还是“15-03-2025”,input.value 或表单提交时发送的值,一定是 ISO 8601 标准的 YYYY-MM-DD 形式:
"2025-03-15" ✅(合法)"2025-3-15" ❌(浏览器不会生成,JS 赋值时会被忽略或重置)"15/03/2025" ❌(用户无法通过原生 date 输入框输入该格式)这是硬性规范,不是可配置选项。如果你看到其他格式,那一定是 JS 手动处理过,或者用了第三方组件。
input[type="date"] 设置初始值必须用 YYYY-MM-DD
直接写 HTML 属性时,value 必须符合标准格式,否则控件显示为空或 fallback 到当前日期:
✅ ❌(无效,被忽略) ❌(无效)
JS 赋值同理:el.value = "2025-03-15" 可以;el.value = new Date().toISOString().split('T')[0] 是安全写法,但 el.value = "2025/03/15" 会静默失败。
原生 input[type="date"] 没有 format、pattern 或 locale 相关属性来改变显示或提交格式:
pattern 对 type="date" 无效(浏览器忽略)
lang 或 dir 不影响日期字符串格式想支持“年/月/日”或带中文提示的输入?只能放弃原生控件,用 JS 库(如 flatpickr、Element Plus 的 el-date-picker)或自己封装文本框 + 格式化逻辑。
真正容易被忽略的一点:服务端收到的 YYYY-MM-DD 是 UTC 零点时间(不带时区),但用户所在地可能是东八区——如果业务对“当天”有严格时区语义(比如活动截止“今天24点”),仅靠这个字符串不够,得额外传时区或统一转为时间戳处理。