最稳妥方式是用 min 配字符串格式的今天日期,如 min: new date().toisostring().slice(0,10),避免 new date() 因时区转换和秒级精度导致失效,且必须配合 reload() 更新,ie 下禁用 tolocaledatestring()。

直接用 min 配字符串格式的今天日期,别传 new Date() 对象——这是最稳妥、兼容性最好、也最不容易出错的方式。
为什么 min: new Date() 会失效
因为 new Date() 带时分秒(比如 2026-09-04T09:51:22),laydate 解析时会按本地时区转成 UTC 时间再比对,导致「上午设的 min,下午点开就禁掉今天」。更麻烦的是:type: 'datetime' 下,秒级精度会让可选窗口压缩到几乎为零。
-
min: new Date().toISOString().slice(0,10)是推荐写法,生成"2026-09-04",强制截断到日,解析为当日 00:00:00 - 绝对不要用
min: new Date().toLocaleDateString(),IE 下格式不统一(如"9/4/2026"),laydate 无法识别 - 如果项目要支持 IE8–10,传字符串比传对象更安全
range: true 场景下两个输入框都要设 min
只给第一个输入框设 min,第二个输入框默认仍可选任意日期(包括昨天)。laydate 不自动校验「结束 ≥ 开始 ≥ 今天」这个链式关系。
- 初始化时,两个
elem都要单独调laydate.render(),且都配min: "2026-09-04" - 若要求「结束日期不能早于开始日期」,需监听第一个框的
done事件,拿到选中值后,对第二个实例调ins2.reload({ min: selectedStart }) - 动态改
min后必须调reload()(≥ v2.8.0),老版本得先destroy()再重 render,但会丢焦点和已填值
手动输入仍能绕过限制?得加前端校验
min 只约束面板选择,不限制 input 框手动输入。如果业务强要求「连手输过去日期都不行」,必须额外加校验:
- 在
done回调里检查value是否早于今天,早于则清空或提示 - 监听
change事件做实时校验(注意加防抖,避免每敲一个字符都触发) - 后端必须做二次校验——前端限制只是体验优化,不可信
真正容易被忽略的是:时区 + 字符串格式 + reload 三者必须同时对齐。哪怕你算对了今天,漏掉一次 reload,或者用了 toLocaleDateString() 导致 IE 里变成 "9/4/2026",整个限制就失效了。











