min必须为字符串格式,如"2026-07-01"或"2026-07-01 00:00:00",禁用new date();type为datetime时需补零到秒级并调用reload()生效。
直接用 min 配字符串格式的“今天”即可,别用 new date();如果是 type: 'datetime',还得补零到秒级精度,且必须调 ins.reload() 才能生效。
min 必须是字符串,不能是 new Date()
这是最常踩的坑:new Date() 带时分秒(比如 "2026-07-01T04:55:33"),laydate 解析时会按本地时区转 UTC 再比对,导致「上午设的限制,下午点开就禁掉今天了」。更糟的是,type: 'datetime' 下还会把秒级精度带进去,可选窗口被压缩到只剩几秒。
-
min: "2026-07-01"安全:解析为当日00:00:00,整个今天都可选 -
min: new Date()❌ 危险:实际禁用的是「此刻之后所有时间」,不是「今天之后」 - 动态生成推荐写法:
min: new Date().toISOString().slice(0, 10)(兼容性好,不依赖month + 1) - 绝对不要写
min: new Date().toLocaleDateString()——IE 下格式不统一,比如变成"7/1/2026",laydate 静默失效
type 为 datetime 时,min 字符串必须补零到秒
type: 'datetime' 要求字符串格式严格匹配内部解析逻辑,缺位或格式错会导致 min 被忽略或截断。
- 正确:
min: "2026-07-01 00:00:00"(年月日+空格+时分秒,全部两位补零) - 错误:
min: "2026-7-1"(月份/日期没补零)、min: "2026-07-01 0:0:0"(时分秒缺位)、min: "2026-07-01T00:00:00"(含 T 不识别) - 如果只限制日期不关心时间,仍建议显式写满
"00:00:00",避免默认补零逻辑在不同版本中不一致
range 模式下两个输入框都要单独设 min
laydate 不自动校验「结束 ≥ 开始 ≥ 今天」这个链式关系。只给第一个框设 min,第二个框默认仍可选任意日期(包括昨天)。
- 初始化时,两个
elem都要传进同一份配置,且各自配min: "2026-07-01" - 若要求「结束日期不能早于开始日期」,需监听第一个框的
done事件,拿到所选日期后,调ins2.set('min', selectedStartStr)再跟ins2.reload() - 注意:
done回调里的data.month是 1 起始(1=一月),但set('min', ...)接收的是字符串,不用处理月份偏移;若手动构造对象则必须data.month - 1
动态改 min 后必须 reload,否则界面无反应
laydate 初始化后不会监听 ins.config.min 的变化。直接赋值只是改内存,UI 日历面板完全无感知。
- 正确流程:
ins.set('min', '2026-07-01 00:00:00')→ins.reload() - 老版本(ins.destroy() 再重
laydate.render(),但会丢焦点和已填值 - 千万别只写
ins.config.min = 'xxx'就以为完事——这行代码等于没写 - reload 是硬性要求,哪怕你字符串算对了、月份也补零了,漏掉这一句,限制就失效
真正容易被忽略的是三件事同时对齐:字符串格式(不含 T、补零)、时区无关(用 toISOString 而非 toLocaleString)、reload 调用(不是可选项)。少一个,用户就能点出不该出现的日期。











