laydate设置默认值为当前时间需显式传入格式化字符串,如value: new Date().toLocaleDateString('zh-CN');若type为datetime则需同步设置format并生成对应格式字符串;input已有value属性时会覆盖配置,须提前清空或移除。

laydate 设置默认值为当前时间的关键是 value 参数
laydate 不会自动把输入框填成当前时间,即使你调用了 laydate.render() 且没传 value,它也只会在用户点击后弹出日历并高亮当天,但输入框仍是空的。要让输入框一打开就显示当前时间,必须显式设置 value。
最稳妥的做法是用 JavaScript 的 Date 对象生成格式化字符串,再传给 value:
laydate.render({
elem: '#test1',
value: new Date().toLocaleDateString('zh-CN') // 输出如:2024/5/20
});
注意:toLocaleDateString 默认是年/月/日格式,和 laydate 默认 format: 'yyyy/MM/dd' 匹配。如果改过 format(比如设成 'yyyy-MM-dd'),就得同步调整 value 的生成方式,否则输入框显示和实际解析可能错位。
用 new Date() 直接赋值会报错或显示 NaN
常见错误是直接写 value: new Date() 或 value: Date.now(),这会导致输入框显示 Invalid Date 或一堆数字(时间戳),因为 laydate 的 value 只接受字符串,且必须符合当前 format 规则。
-
value: new Date()→ 转成字符串是类似"Mon May 20 2024 14:30:00 GMT+0800",laydate 解析失败 -
value: Date.now()→ 是数字,laydate 会尝试 toString(),变成时间戳字符串,不匹配日期格式 - 正确做法始终是:先格式化成字符串,再传入
如果需要带时分秒,默认 type: 'datetime' 才生效
laydate 默认 type: 'date',只处理年月日。想默认显示“2024/5/20 14:30:25”,得同时改两个地方:
- 设置
type: 'datetime' - 设置
format: 'yyyy/MM/dd HH:mm:ss' - 对应地,
value必须按这个格式生成,例如:value: new Date().toLocaleString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit', hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' }).replace(/\/|,/g, '/').replace(/\s+/g, ' ')(更推荐用formatDate工具函数)
layui 自带 laydate.now()(已废弃)或 laydate.formatDate()(v2.8+),但后者需手动引入或确认版本支持;简单项目建议自己用 toISOString() 截取再替换,比如:new Date().toISOString().slice(0, 19).replace('T', ' ').replace(/-/g, '/')
input 元素已有 value 时,value 配置会被忽略
这是最容易被忽略的一点:如果 HTML 中 <input id="test1" value="2024-01-01"> 已有初始值,那么无论你在 laydate.render() 里怎么设 value,最终显示的都是 HTML 里的那个值。
解决方法只有两个:
- 删掉 input 上的
value属性(推荐,保持 JS 控制权) - 在 render 前用 JS 清空:
document.getElementById('test1').value = '',再调laydate.render()
否则你会反复调试半天,发现 value 写对了也没用——其实是 DOM 层级覆盖了配置项。


















