HTML5 date 输入控件强制使用 ISO 8601 格式 YYYY-MM-DD,提交和 JS 赋值均须严格遵守,不支持自定义格式;初始 value 属性或 el.value 必须为该格式,否则无效;显示样式与 locale 无关,时区语义需额外处理。

HTML5 中的日期输入控件 本身不定义“格式写法”,它只规定了用户交互行为和提交时的标准化字符串格式——这个格式是固定的,不能自定义。
浏览器提交的 date 值永远是 YYYY-MM-DD
无论用户在日历控件里怎么选、本地系统用的是“2024/3/15”还是“15-03-2024”,input.value 或表单提交时发送的值,一定是 ISO 8601 标准的 YYYY-MM-DD 形式:
-
"2024-03-15"✅(合法) -
"2024-3-15"❌(浏览器不会生成,JS 赋值时会被忽略或重置) -
"15/03/2024"❌(用户无法通过原生 date 输入框输入该格式)
这是硬性规范,不是可配置选项。如果你看到其他格式,那一定是 JS 手动处理过,或者用了第三方组件。
给 input[type="date"] 设置初始值必须用 YYYY-MM-DD
直接写 HTML 属性时,value 必须符合标准格式,否则控件显示为空或 fallback 到当前日期:
立即学习“前端免费学习笔记(深入)”;
✅ ❌(无效,被忽略) ❌(无效)
JS 赋值同理:el.value = "2024-03-15" 可以;el.value = new Date().toISOString().split('T')[0] 是安全写法,但 el.value = "2024/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点”),仅靠这个字符串不够,得额外传时区或统一转为时间戳处理。










