type 必须设为 datetime,range 才真正生效;value 字符串需用“空格-空格”分隔且格式严格匹配 format;动态设今日起止时间推荐用 toisostring() 切片;自定义分隔符直接设 range 为字符串即可。
type 必须设为 datetime,range 才真正生效
很多人以为 range: true 配合 type: 'time' 或 type: 'date' 就能选时间范围,实际不行。type: 'time' 只能选 “08:30:00 - 17:45:00” 这种纯时间,不带日期,laydate 会直接报错或截断;type: 'date' 虽然能渲染范围面板,但点确定后时分秒全归零,根本存不住时间。只有 type: 'datetime' 同时支持日期+时间+双端范围,是唯一正确起点。
value 字符串必须含空格短横空格分隔符,且两端格式严格匹配 format
哪怕 format: 'yyyy-MM-dd HH:mm:ss' 写对了,value 也得是 "2026-04-24 00:00:00 - 2026-04-24 23:59:59"——中间三个字符必须是 (空格)、-(英文短横)、 (空格)。常见错误:
-
"2026-04-24 00:00:00–2026-04-24 23:59:59"(用了全角破折号) -
"2026-04-24 00:00:00-2026-04-24 23:59:59"(缺前后空格) -
"2026-04-24 - 2026-04-24"(没写时分秒,但 format 要求写了)
laydate 对 value 不做容错解析,错一个字符就静默忽略,输入框留空。
动态设今日起止时间,用 toISOString() 切片最稳
别手拼字符串或用 setHours(0,0,0),本地时区可能偏移 8 小时,导致生成的起始时间变成昨天。安全写法:
const now = new Date();
const start = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);
const end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);
const valueStr = `${start.toISOString().slice(0, 19).replace('T', ' ')} - ${end.toISOString().slice(0, 19).replace('T', ' ')}`;
laydate.render({
elem: '#range',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm:ss',
value: valueStr
});
toISOString() 输出 UTC 时间,切片再替换 T,绕过所有时区陷阱。
要自定义分隔符(如“至”),直接传字符串给 range
不用监听 input、不用正则替换、不用手动拼接。range: '至' 就够了,前提是单个 input 绑定(即 elem 指向一个输入框):
laydate.render({
elem: '#range',
type: 'datetime',
format: 'yyyy-MM-dd HH:mm:ss',
range: '至', // ← 这里不是布尔值,是字符串
value: '2026-04-24 00:00:00 至 2026-04-24 23:59:59'
});
注意:value 里的分隔符必须和 range 值完全一致,否则解析失败;也不能带多余空格,比如 '至 '(末尾空格)会导致失效。











