laydate type="year" 必须配对 format: "yyyy",value 初始化需为合法日期字符串如"2026-01-01",min/max须严格匹配format格式,change回调中需同步输入框值并移除浮层实现一点即关。

laydate type="year" 是唯一正确入口
设 type: "year" 就直接切换为纯年份选择面板,不需要隐藏日历、不依赖 CSS、也不用监听 click 自行关闭。这是 laydate 原生能力,不是 hack。
但必须配对 format: "yyyy",否则输入框显示格式错乱、返回值可能仍带月日。常见错误是只改 format 却保留 type: "date",结果日历照常可点日,值也默认补 -01-01。
-
type: "year"→ 必须写format: "yyyy",返回值如"2026" - 别写
format: "yyyy-MM"或format: "yyyy-MM-dd",会警告且渲染异常 - 不支持
format: "y"(单字母年),只认"yyyy"或带中文的"yyyy年"
value 初始化必须是合法日期字符串
laydate.render() 的 value 参数不能传 "2026" 或 2026,否则控件可能不渲染、或静默回退到当前年。它底层用 Date.parse() 解析,必须是能转成有效 Date 对象的字符串。
- 推荐写
value: "2026-01-01"(年份确定时最稳) - 也可用
value: new Date(2026, 0, 1),月份从 0 开始,安全 - 若后端只返回
"2026",前端拼成"2026-01-01"再传 - 避免硬编码
"2025-01-01",上线后第二年就失效;可用laydate.now(0, "yyyy-MM-dd")动态生成
min/max 要严格匹配 format 格式
min 和 max 必须是字符串,且格式与 format 完全一致。传 new Date() 或对象(如 {year: 2026})会失效。
-
type: "year"+format: "yyyy"→min: "2020",max: "2026" - 别写
min: 2020(数字)、min: "2020-01"(多出月)、min: new Date(2020, 0)(对象) - 动态更新要用实例方法:
ins.set("min", "2025"),不能直接改ins.config.min -
min/max只约束可选范围,不影响初始面板位置——想默认打开 2025 年,还得靠value引导
change 回调里手动同步并移除浮层才能“一点即关”
默认行为是点完年份后还得点“确定”才赋值并关闭。要实现点完立刻关,必须在 change 回调里做两件事:同步输入框值 + 干掉浮层 DOM。
- 用
lay("#inputId").val(value)同步输入框 - 紧接着执行
$(".layui-laydate").remove()删除整个浮层 - 别在
done里做这事——done是点“确定”后才触发 - 别只改
val却不删面板,否则用户再点别的年份,面板还在,值已变,体验割裂 - 返回值是字符串(如
"2026"),不是数字,别直接拿去算术运算











