VueJS中如何实现无AM/PM的24小时制原生time时间选择器
问题原因
原生HTML的<input type="time">没有提供任何原生属性可以强制指定时间选择器的12/24小时制显示规则,你看到的带AM/PM的12小时制样式,是浏览器根据当前用户的系统区域时间设置、浏览器语言偏好自动渲染的,这也是你查MDN找不到对应配置项的原因——这个行为本来就不属于网页可强制控制的原生属性范畴。
可落地的实现方案
方案1:通过lang属性适配(零依赖,覆盖绝大多数普通用户场景)
你可以给输入框或者其上层父容器添加对应24小时制默认区域的lang属性,引导浏览器优先渲染24小时制样式,修改后的代码如下:
<!-- Start Time --> <div v-if="this.selectedValue=== '1'" class="container mx-auto flex bg-white px-6 py-1 space-x-2"> <dashboard-input-label class="col-sm-2 mb-2 w-full" identifier="shift_start_time"> Start time </dashboard-input-label> <div class="col-sm-10 mb-6 w-full"> <input name="shift_start_time" type="time" class="form-input w-full relative z-10" placeholder="Start time" lang="en-GB" > </div> </div> <!-- Start Time -->
常用的默认24小时制区域标识包括en-GB(英国英语)、zh-CN(简体中文)、de-DE(德语)等,其中en-GB的兼容性最好,在Chrome、Edge、Safari等主流浏览器上都会默认渲染不带AM/PM的24小时制选择器。
注意:这个方案不是100%强制生效,如果用户手动修改了操作系统的区域时间格式,强制把对应地区的时间显示改成12小时制,选择器还是会跟随系统设置,但这个场景占比极低,普通用户基本不会做这类自定义修改。
方案2:使用第三方时间选择器组件(100%强制24小时制,无系统依赖)
如果你的业务要求所有用户无论系统如何设置,都必须显示统一的24小时制时间选择器,直接放弃原生type="time"输入,换用Vue生态成熟的时间选择组件即可,这类组件的时间格式完全由前端配置决定,不受系统环境影响:
- 如果你用Element Plus/Vue3,直接用
el-time-picker组件,配置format="HH:mm"即可实现24小时制无AM/PM的效果 - 如果你用Vuetify,直接用
v-time-picker组件,设置format="24hr"即可 - 如果要轻量实现,可以选
@vuepic/vue-timepicker这类无UI框架依赖的独立组件,同样支持强制指定24小时格式
避坑提醒
不要尝试通过给输入框设置24小时格式的初始value(比如value="13:00")来修改显示样式,这个操作只会修改输入框的默认选中值,不会改变选择器本身的12/24小时制渲染逻辑。
内容的提问来源于stack exchange,提问作者Arctic Fox
相关产品推荐
相关产品推荐

