layui时间控件选择时间范围的实现方法


Posted in Javascript onSeptember 28, 2019

解决layui时间控件清空之后无法正常使用的问题,以及时间范围的选择

共有两种解决方式:

方式一(layui 1.x):

html代码:

<div class="layui-inline">
  <div class="layui-input-inline">
      <input type="text" name="start_time" class="layui-input" id="start_time" 
         placeholder="开始时间(修改时间)">
   </div>
 </div>
 <div class="layui-inline">
   <div class="layui-input-inline">
     <input type="text" name="end_time" class="layui-input" id="end_time" 
         placeholder="结束时间(修改时间)">
   </div>
 </div>

js代码:

var start = {
   istime: true,
   format: 'YYYY-MM-DD hh:mm:ss',
   max: '2099-06-16 23:59:59',
   istoday: true,
   choose: function (datas) {
     end.min = datas; //开始日选好后,重置结束日的最小日期
   }
 };
 
 var end = {
   istime: true,
   format: 'YYYY-MM-DD hh:mm:ss',
   max: '2099-06-16 23:59:59',
   istoday: true,
   choose: function (datas) {
     start.max = datas; //结束日选好后,重置开始日的最大日期
   }
 };
 
 document.getElementById('start_time').onclick = function () {
   start.elem = this;
   laydate(start);
 };
 document.getElementById('end_time').onclick = function () {
   end.elem = this;
   laydate(end);
 };

方式二(layui 2.x):

html代码

<div class="layui-inline">
    <div class="layui-input-inline">
       <input type="text" name="start_time" class="layui-input" id="start_time" 
           placeholder="开始时间(修改时间)">
    </div>
  </div>
  <div class="layui-inline">
    <div class="layui-input-inline">
      <input type="text" name="end_time" class="layui-input" id="end_time" 
          placeholder="结束时间(修改时间)">
    </div>
  </div>

js代码

layui.use([ 'laydate'], function(){
  var $ = layui.$;
  var laydate = layui.laydate;
  var nowTime = new Date().valueOf();
  var max = null;
 
    var start = laydate.render({
    elem: '#start_time',
    type: 'datetime',
    max: nowTime,
    btns: ['clear', 'confirm'],
    done: function(value, date){
      endMax = end.config.max;
      end.config.min = date;
      end.config.min.month = date.month -1;
    }
  });
  var end = laydate.render({
    elem: '#end_time',
    type: 'datetime',
    max: nowTime,
    done: function(value, date){
      if($.trim(value) == ''){
        var curDate = new Date();
        date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()};
      }
      start.config.max = date;
      start.config.max.month = date.month -1;
    }
});

根据开始时间 动态限制结束时间 知识点

type: 'datetime', 是带时分秒的 date 是不带时分秒的

layui.use('laydate', function(){
  /* lay('.layui-input').each(function(){
  laydate.render({
   elem: this
   ,trigger: 'click'
   ,change: function(value, date, endDate){
    console.log(value); //得到日期生成的值,如:2017-08-18
    console.log(date); //得到日期时间对象:{year: 2017, month: 8, date: 18, hours: 0, minutes: 0, seconds: 0}
    console.log(endDate); //得结束的日期时间对象,开启范围选择(range: true)才会返回。对象成员同上。
   }
  });
 }); */
 var $ = layui.$;
   var laydate = layui.laydate;
  var nowTime = new Date().valueOf();
   var max = null;
    var start = laydate.render({
     elem: '#start_time',
     type: 'datetime',
     btns: ['clear', 'confirm'],
     done: function(value, date){
       endMax = end.config.max;
       end.config.min = date;
       end.config.min.month = date.month -1;
     },
     change: function(value, date, endDate){
     var timestamp2 = Date.parse(new Date(value));
  timestamp2 = timestamp2 / 1000;
       end.config.min = timestamp2;
       end.config.min.month = date.month -1;
   }
   });
   var end = laydate.render({
     elem: '#end_time',
     type: 'date',
     done: function(value, date){
     console.log(" ====== "+date);
       if($.trim(value) == ''){
         var curDate = new Date();
         date = {'date': curDate.getDate(), 'month': curDate.getMonth()+1, 'year': curDate.getFullYear()};
       }
       start.config.max = date;
       start.config.max.month = date.month -1;
     }
   });
 });

通过以上代码,就已经可以实现动态改变开始时间最大值与结束时间最小值的改变了。

下面来说一下容易遇到的坑:

坑一 :laydate.render无法重复渲染,当laydate.render对应一个elem已经渲染过一次之后,我们是无法通过再次渲染来修改其中的max值与min值的。

坑二 :startDate.config.max与endDate.config.min是一个对象,不是一个字符串,在网上看到一个人不负责任的给了这么一句话,endDate.config.min="2017-01-01";说可以设置,我居然信了他的邪掉进坑里半天。实际这里得到的是一个对象,不同于在我们渲染时的min与max了,直接将字符串赋值必然没有效果。

坑三:dates的格式虽然与endDate.config.min格式相同但是直接让endDate.config.min=dates你会发现并不是你想要的结果,是因为虽然dates中的数据是你选择的日期,可是endDate.config.min中设置的month的值却比你输入的month的值大了一个月,因此假如你选的开始日期是11月13日,直接赋值给了endDate.config.min之后你会发现结束日期的最小日期变成了12月13日,因此我们需要将dates中的月份值减一后再赋值给endDate.config.min

以上这篇layui时间控件选择时间范围的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
网页自动跳转代码收集
Sep 27 Javascript
javascript学习笔记(十九) 节点的操作实现代码
Jun 20 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
Dec 10 Javascript
jquery如何通过name名称获取当前name的value值
Dec 20 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
Bootstrap每天必学之表格
Nov 23 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
vue自动添加浏览器兼容前后缀操作
Aug 13 Javascript
Js Snowflake(雪花算法)生成随机ID的实现方法
Aug 26 Javascript
JavaScript实现雪花飘落效果
Dec 27 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 #Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 #Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 #Javascript
layui的select联动实现代码
Sep 28 #Javascript
关于layui的下拉搜索框异步加载数据的解决方法
Sep 28 #Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 #Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 #Javascript
You might like
PHP 和 MySQL 基础教程(四)
2006/10/09 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
javascript如何写热点图
2015/12/08 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JSONP基础知识详解
2017/03/19 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
Python线程创建和终止实例代码
2018/01/20 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python实现126邮箱发送邮件
2020/05/20 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
HTML5不支持标签和新增标签详解
2016/06/27 HTML / CSS
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
"序列点" 是什么
2016/07/29 面试题
大学生毕业自荐信
2013/10/10 职场文书
仓库主管岗位职责
2014/03/02 职场文书
《英英学古诗》教学反思
2014/04/11 职场文书
同学聚会策划方案
2014/06/06 职场文书
企业文化口号
2014/06/12 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
科学育儿宣传标语
2014/10/08 职场文书
财务人员入职担保书
2015/09/22 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android