必须设置 type: 'date' 且 format 不含时间占位符(如 hh/mm/ss),否则即使界面隐藏时间面板,内部仍启用时间模块;禁用 btns: ['now'],避免触发时间选择。

laydate 设置只选日期不选时间的关键配置
默认情况下,laydate 会根据 type 和 format 自动决定是否显示时间面板。要彻底禁用时间选择,不能只靠隐藏按钮或 CSS 遮盖,必须从初始化参数入手。
必须设置 type: 'date' 且避免 format 包含时间字段
很多人误以为只要不写 format 就安全,其实不然——如果漏设 type 或 format 里混入 H、m、s 等时间占位符,laydate 仍会加载时间选择器(哪怕界面没显示)。
-
type: 'date'是强制切换为纯日期模式的开关,不设则可能回退到'datetime'默认行为 -
format: 'yyyy-MM-dd'是安全格式,'yyyy/MM/dd'也行;但'yyyy-MM-dd HH:mm'会触发时间面板 - 即使
type正确,若format含HH,laydate 内部仍会启用时间模块,导致按 Tab 键可跳入时间输入框
额外检查点:避免意外启用时间功能的参数
有些配置看似无关,实则会悄悄激活时间逻辑:
- 删掉
showBottom: true—— 这个参数在type: 'date'下虽不报错,但可能干扰底部按钮渲染,引发时间按钮残留 - 不要设
range: true时搭配format: 'yyyy-MM-dd HH:mm',范围选择器对 format 更敏感,容易漏检 - 确认没引入多余模块:如果页面同时用了
laydate.js和完整版layui.all.js,可能因模块加载顺序导致 timePicker 被提前挂载
一个稳妥的初始化示例
以下代码能稳定屏蔽所有时间交互入口:
laydate.render({
elem: '#test1',
type: 'date',
format: 'yyyy-MM-dd',
// 不加 trigger、showBottom、btns 等易触发时间的选项
// 如果需要清空按钮,用 btns: ['clear', 'confirm'],别加 'now'
});
注意:btns: ['now'] 会强制唤起时间面板,哪怕 type 是 'date';'now' 按钮本质是“当前日期+时间”,和类型无关。
真正难察觉的是 format 和 type 的隐式耦合——改了一个不改另一个,问题就藏在交互细节里,比如点击输入框后按方向键,或粘贴带时间的字符串,都可能意外暴露时间控件。











