Layui日期插件如何设置选择范围不能超过30天

千瑶同学_1982

千瑶同学_1982

2026-06-02

664人浏览

原创

laydate需用动态计算的min/max实现静态30天范围限制,如min设为当前减30天、max为当前日;range模式下须通过done回调重绘另一实例实现联动;disableddate函数更优,可实时校验日期有效性。

laydate如何用min/max实现静态30天范围限制

min/max本身不能直接表达“相对当前选择的30天”,它们只接受绝对时间点。所以如果你的需求是“始终只能选最近30天”,就得把min设成今天减30天、max设成今天,且每次页面加载都要动态计算。

常见错误现象:写死min: '2026-03-25',结果过两天就失效;或用new Date()传进去,却没处理时区,导致UTC时间比本地早8小时,边界错位一整天。

  • 推荐写法:用new Date().getTime() - 30 * 24 * 3600 * 1000算出毫秒数,再转成字符串格式,例如"2026-03-26"(注意月份是0起始,但字符串不用管)
  • 若type为'datetime',min/max必须带时分秒,否则默认按00:00:00解析,可能意外禁掉当天部分时间
  • 字符串格式必须严格匹配format,比如format: 'yyyy-MM-dd HH:mm:ss'时,min就得是"2026-03-26 00:00:00"

range模式下如何让开始/结束日期动态联动30天

单纯靠min/max无法实现“选了开始时间后,结束时间只能往后30天”——因为min/max是静态配置,不随用户操作变化。必须借助done回调 + 重新渲染另一个实例。

使用场景:请假系统、订单查询、活动周期设置等强业务约束场景。

  • 两个input必须分开绑定,例如elem: '#start'和elem: '#end',不能共用一个range: true配置
  • 在#start的done里拿到所选日期date,用new Date(date.year, date.month - 1, date.date)构造Date对象(注意date.month是1起始,内部config要0起始)
  • 算出30天后的最大日期:const maxEnd = new Date(startDate.getTime() + 30 * 24 * 3600 * 1000),再用laydate.render({ elem: '#end', min: ..., max: ... })重绘
  • 修改开始时间时,务必先清空#end的value,否则用户可能提交非法范围

为什么disabledDate更适合做30天动态校验

从Layui 2.9.8起,disabledDate函数正式支持,它比手动重render更轻量、更可控,适合需要频繁响应用户操作的场景。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载

它每渲染一个日期格子就调一次,参数是Date对象,返回true即禁用该日期。

  • 别在disabledDate里实时new Date()或查接口,提前缓存好基准时间戳,比如this.baseTime = Date.now()
  • 判断逻辑示例:return time.getTime() > (this.baseTime + 30 * 24 * 3600 * 1000) || time.getTime()
  • 如果baseTime来自用户输入(如开始时间),记得在相关事件中调ins.reload()触发重绘,否则禁用状态不会更新
  • 注意:disabledDate只影响面板点击,不阻止手动输入,如需完全校验,得配合change事件做二次验证

value超出30天范围时为什么输入框为空

laydate对value和min/max是两套独立逻辑:value是初始填入值,min/max是可选边界。如果value落在min/max之外,laydate会静默忽略,不报错也不提示。

容易踩的坑:复制别人代码时只改了min/max,忘了同步调整value,结果页面打开就是空输入框,还以为JS挂了。

  • 确保value字符串两端都落在min~max之间,比如min: "2026-03-26",就别设value: "2026-03-25"
  • range模式下,value必须是"2026-03-26 - 2026-04-25"这种格式,中间三个字符必须是" - "(空格+短横+空格),不能是中文“至”或连字符
  • type必须是'datetime'才能支持带时间的范围,type: 'date'会丢掉时分秒,导致value解析失败

实际中最容易被忽略的是:disabledDate函数的执行频率极高,每次渲染日历都会调用,如果里面做了耗时操作(比如查API、遍历大数组),页面会明显卡顿。宁可多花10行代码预计算好时间戳,也不要图省事在函数里现场算。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

180

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

140

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

80

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 12.7万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习