input type="time"需严格遵循"HH:MM"或"HH:MM:SS"格式,value、min、max必须补零且24小时制;step单位为整数秒,小数无效;校验用正则而非Date.parse();旧版Safari需降级处理。

input type="time" 是最轻量、最直接的方案,浏览器原生支持,移动端自动唤起系统时间选择器,无需 JS 就能拿到标准格式字符串。
为什么 value="9:30" 不生效?必须补零且 24 小时制
浏览器只认严格格式:"HH:MM"(分钟级)或 "HH:MM:SS"(秒级)。写成 "9:30"、"09:30 AM" 或 "24:00" 都会被忽略,输入框显示为空。
-
value必须是两位小时 + 两位分钟,例如"09:30"、"23:59" - 如果用了
step="1",value必须带秒,例如"14:25:30",否则初始值不显示 -
min/max同样要遵守该格式,如min="08:00"、max="17:30"
step 控制精度:不是“半分钟”,而是“每 N 秒一个选项”
step 的单位是**整数秒**,它定义的是可选时间点的间隔,不是模糊描述。
-
step="60"(默认)→ 只能选到分钟,如"14:25"、"14:26" -
step="30"→ 可选"14:25:00"、"14:25:30",不是“14:25.5”这种无效概念 -
step="1"→ 支持秒级选择,但必须设value="14:25:30"才能预填充 -
step="0.5"或小数无效,浏览器直接忽略该属性
JS 读取和校验别信 Date.parse(),用正则更可靠
timeInput.value 返回的是纯字符串,格式固定。但 Date.parse("25:00") 居然返回有效时间戳(溢出处理),导致校验失效。
将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
立即学习“前端免费学习笔记(深入)”;
- 分钟级校验用:
/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/ - 秒级校验用:
/^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/ - 空值判断别只写
value === "",加.trim()防空格:!value.trim() - 不要用
valueAsDate读time输入框——它返回的日期恒为1970-01-01,容易误用
旧版 Safari(iOS 15.4 之前)不支持,检测后降级比硬上更稳
在 iOS 15.4 之前的 Safari 中,type="time" 会直接降级为普通文本框,用户只能手输,极易出错。
- 检测方式:
const input = document.createElement('input'); input.type = 'time'; if (input.type !== 'time') { /* fallback */ } - 推荐 fallback 方案:两个
select(小时 + 分钟),或引入轻量库如flatpickr;别 fallback 成type="text"+ 正则提示,体验断裂 - 别碰
datetime-local:Safari 支持但 Firefox 完全不支持,实际项目中基本不用
真正麻烦的从来不是写那一行 <input type="time">,而是 value 格式错一位、step 值设成小数、或者在没检测的环境下把老 iOS 用户丢进文本框里手动输 "14:30"。这些地方一漏,前端就从省事变成埋雷。


















