必须显式设置value参数且与format严格匹配,推荐用laydate.now(0, 'yyyy-MM-dd HH:mm:ss')生成字符串,同时需配trigger:'click'或'focus'确保生效。

layui datepicker 默认显示当前时间要设 value 还得配 trigger
layui 的 laydate 默认不自动填入当前时间,哪怕你用了 type: 'datetime'。它只在用户点开后默认高亮当天,但输入框仍是空的——这是最常被误解的一点。
想让输入框一加载就显示“此刻”的完整日期时间,必须手动设置 value 参数,并确保格式与 format 严格一致:
-
value必须是字符串(不是Date对象或时间戳),例如"2024-05-20 14:30:25" -
format要和value字符串格式完全匹配,比如设了format: 'yyyy-MM-dd HH:mm:ss',那value就不能少秒、不能用斜杠分隔 - 如果没显式写
trigger: 'click'(或'focus'),某些版本下value可能不生效,尤其配合elem绑定到已有input时
laydate.render({
elem: '#test',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm:ss',
value: new Date().toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
}).replace(/\//g, '-').replace(/年|月/g, '-').replace(/日/, ' ')
});
用 new Date().toISOString() 简单截取会出错
直接写 value: new Date().toISOString().slice(0, 19).replace('T', ' ') 看似方便,但容易翻车:
- ISO 时间是 UTC,你本地是东八区,结果会比系统时间慢 8 小时
- 某些低版本浏览器(如 IE)不支持
toISOString(),导致整个渲染失败 - 没做
padStart补零的话,个位数月份/日期会变成"2024-5-5 9:7:3",而laydate校验严格,直接拒识
更稳妥的做法是手拼字符串,或用 laydate.now()(layui 内置方法):
value: laydate.now(0, 'yyyy-MM-dd HH:mm:ss')
注意:第二个参数必须和 format 一致,否则仍为空。
绑定已有 input 且已带值时,value 参数会被忽略
如果你的 HTML 是 ,然后调 laydate.render({ elem: '#test', value: '2024-05-20' }),最终显示的还是 "2024-01-01"。
- laydate 初始化时优先读 DOM 上的
value属性,覆盖 JS 传入的value - 解决办法:初始化前清空 DOM 值,或改用
ready回调重置
document.getElementById('test').value = '';
laydate.render({
elem: '#test',
format: 'yyyy-MM-dd',
value: laydate.now(0, 'yyyy-MM-dd'),
ready: function(date) {
// 确保首次展开时也准确定位到今天
}
});
移动端点开后光标乱跳、时间重置为 00:00
在 iOS Safari 或部分安卓 WebView 中,如果 type 是 'datetime' 但没设 min,点开后时间部分可能自动归零(如 "2024-05-20 00:00:00")。
- 这不是 bug,是 laydate 对移动端的兼容策略:当未指定最小可选时间时,它会把时间部分“安全化”为起始值
- 加一句
min: laydate.now(0, 'yyyy-MM-dd HH:mm:ss')即可锁定当前时刻为最小值,同时保持时间显示准确 - 若需允许选择历史时间,就别设
min,但得接受移动端首次点开时间归零——这时建议用type: 'date'+ 单独加个时间选择器
真正麻烦的是时区和 DOM 同步时机:value 设对了,但用户还没点开,输入框看着是对的;一点开,内部日期对象却按本地时区重新解析了一次,导致显示偏移。这种细节,不真机测几轮根本发现不了。











