必须显式传 value 且 type 与 format 严格匹配,否则输入框为空;推荐传 new date() 而非字符串,避免时区和格式问题;range 模式需用 ' - ' 分隔且两端时间合法。
必须显式传 value,且 type 与 format 严格匹配,否则输入框永远为空——这是“看起来没反应”的真正原因。
为什么设了 value: new Date() 还是空?
laydate 不会自动把面板里高亮的“今天”同步到输入框值。它只认你传的 value,而且校验极严:
-
type: 'date'时,value: new Date()会被截断为年月日,没问题 -
type: 'datetime'时,value: new Date()带时分秒,但若format里没写HH:mm:ss,时间部分会被静默丢弃 -
format: 'yyyy-MM-dd HH:mm:ss'却传value: '2026-07-01'→ 解析失败,输入框为空 - 没传
value,哪怕点开面板看到 2026 年 7 月 1 日被高亮,输入框也一定是空的
value 该传什么?字符串 or Date 对象?
推荐直接传 new Date(),最稳:
- 自动适配本地时区,不依赖后端或硬编码
- 避免
toISOString().slice(0,10)导致 UTC 时间偏移(比如凌晨 00:53 渲染,ISO 返回的是 2026-06-30) - 不用手拼
getYear() + '-' + (getMonth()+1) + '-...',避开月份从 0 开始的坑 - IE8–10 兼容性好——传对象不是字符串,老 IE 不会解析失败
如果非要用字符串,用 laydate.now(0, 'yyyy-MM-dd HH:mm:ss'),它内部已做时区对齐和补零;别自己拼 '2026-07-01 00:53:00',上线后第二天就失效。
type 和 format 怎么配才不出错?
三者必须闭环匹配:
- 要显示当前时分秒 →
type: 'datetime'(不是'date'或'time') -
format里写了HH:mm:ss→value就不能只给日期字符串 -
format: 'yyyy-MM-dd'却设type: 'datetime'→ 输入框可能显示日期,但点确定后时分秒是 00:00:00,不是“当前时间” - 验证方法:控制台执行
laydate.now(0, 'yyyy-MM-dd HH:mm:ss'),看返回是否和你的format完全一致
range 模式下默认选中“今天 00:00:00 至 23:59:59”
光写 value: '2026-07-01 00:00:00 - 2026-07-01 23:59:59' 不够,laydate 要求:
- 分隔符必须是
' - '(空格 + 短横 + 空格),不能是'–'、'-'或'至' - 两端时间都得合法,且格式与
format一致 -
type必须是'datetime','date'会丢掉时间 - 推荐构造方式:
const now = new Date();<br>const start = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);<br>const end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);<br>const valueStr = `${start.toISOString().slice(0, 19).replace('T', ' ')} - ${end.toISOString().slice(0, 19).replace('T', ' ')}`;
注意:如果同时设了 min 或 max,它们会校验 value 是否在范围内,超出则静默忽略——容易导致默认值消失,别忘了检查。











