这几天碰到了layui中的日期与时间这个,本以为很简单的,可是又一个需求是这样的,有两个日期选择框,第一个日期选择框要求最小日期不得小于当前日期,第二个日期选择框要求最小日期为第一个日期选择框的选中日期,最大日期须在24小时内,本以为不会很难。

  于是按照惯例,先渲染第一个日期选择框,然后渲染第二个日期选择框,结果后来发现这样行不通。还是直接上具体的代码吧。

  

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>layer</title>
<link rel="stylesheet" href="../dist/css/layui.css">
</head>
<body>
<form action="" class="layui-form">
<div class="layui-form-item">
<div class="layui-inline">
<label for="" class="layui-form-label">时间段</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="startTime">
</div>
<div class="layui-form-mid">到</div>
<div class="layui-input-inline endTime">
<input type="text" class="layui-input" id="endTime">
</div>
</div>
</div>
</form>
<script src="../dist/jquery.min.js"></script>
<script src="../dist/layui.js"></script>
<script>
let [form,laydate] = ["",""];
var now = new Date();
var start = now.getTime(); // 将当前时间转换为时间戳
layui.use(['form','laydate'],function(){
form = layui.form;
laydate = layui.laydate;
laydate.render({
elem:'#startTime',
type:'datetime', // 可选择年、月、日、时、分、秒
min:start, // 规定最小日期
done:function(value){
// value为第一个日期选择框选择的日期
const start2 = new Date(value).getTime();
const end = start2 + 24*60*60*1000;
const elemId = "endTime" + new Date().getTime();
// 当第一个日期选择框选择完日期后,将类选择器endTime里的内容清空,给它重新添加内容,且新添加元素的id是动态改变的,这样第二个日期框在第一个日期框每次选择完后会重新渲染
$('.endTime').empty().append(`<input type="text" class="layui-input" id="${elemId}">`)
laydate.render({
elem:`#${elemId}`,
type:'datetime',
min:start2, // 最小日期不得小于第一个日期选择框的值
max:end // 最大日期在24小时内
})
}
});
})
</script>
</body>
</html>

  虽然这样能解决问题,能保证第二个日期框最小值为第一个日期框的选择值,最大值为第一个日期选择值的24小时内。但是中间存在着一个bug,那就是只有选择第一个日期框后,才能更改第二个日期框中的值,显然这不是我们想要的,我们想要的是,可以直接更改第二个日期框的值,同时满足条件:最小值为第一个日期框的选择值,最大值为第一个日期选择值的24小时内。那么这时候就要对第二个日期框再渲染一次,只不过这次不是在第一个日期框选择后的回调函数里渲染,而是与第一个日期框一起渲染。那么此时的代码为:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>layer</title>
<link rel="stylesheet" href="../dist/css/layui.css">
</head>
<body>
<form action="" class="layui-form">
<div class="layui-form-item">
<div class="layui-inline">
<label for="" class="layui-form-label">时间段</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="startTime">
</div>
<div class="layui-form-mid">到</div>
<div class="layui-input-inline endTime">
<input type="text" class="layui-input" id="endTime">
</div>
</div>
</div>
</form>
<script src="../dist/jquery.min.js"></script>
<script src="../dist/layui.js"></script>
<script>
let [form,laydate] = ["",""];
var now = new Date();
var start = now.getTime(); // 将当前时间转换为时间戳
layui.use(['form','laydate'],function(){
form = layui.form;
laydate = layui.laydate;
laydate.render({
elem:'#startTime',
type:'datetime', // 可选择年、月、日、时、分、秒
min:start, // 规定最小日期
done:function(value){
// value为第一个日期选择框选择的日期
const start2 = new Date(value).getTime();
const end = start2 + 24*60*60*1000;
const elemId = "endTime" + new Date().getTime();
// 当第一个日期选择框选择完日期后,将类选择器endTime里的内容清空,给它重新添加内容,且新添加元素的id是动态改变的,这样第二个日期框在第一个日期框每次选择完后会重新渲染
$('.endTime').empty().append(`<input type="text" class="layui-input" id="${elemId}">`)
laydate.render({
elem:`#${elemId}`,
type:'datetime',
min:start2, // 最小日期不得小于第一个日期选择框的值
max:end // 最大日期在24小时内
})
}
});
laydate.render({
elem:'#endTime',
type:'datetime',
min:, // 该值为第一个日期框的值,一般是从服务器端获取
max: // 该值为第一个日期框值的24小时内,可用时间戳来解决
})
})
</script>
</body>
</html>

使用layui在规定的期限内选择日期的更多相关文章

  1. ExtJs内的datefield控件选择日期过后的事件监听select

    [摘要]: 选择时间过后我们为什么需要监听事件?一般有这样一种情况,那就是用于比较两个时间大小或者需要判断在哪个时间点上需要做什么样的操作.基于这样的种种情况,我们很有必要琢磨一下datefield控 ...

  2. jquery 时间控件怎么能禁止输入只能选择日期?

    jsp一个input输入框用的是easyui时间控件,现在问题是如何是这个input只能点击选择日期,而禁止手动输入 解决方法::: 在日期的input标签里面添加::::editable=" ...

  3. [js开源组件开发]js手机联动选择日期 开源git

    js手机联动选择日期 这里在前面的<js手机联动选择地区>的基础上,改造数据源之后形成的一个日期的选择器,当然你可以使用之前的PC上模式的<日期控件>,它同时也支持手机端,ht ...

  4. asp.net 弹出式日历控件 选择日期 Calendar控件

    原文地址:asp.net 弹出式日历控件 选择日期 Calendar控件 作者:逸苡 html代码: <%@ Page Language="C#" CodeFile=&quo ...

  5. 原生js日期时间插件鼠标点击文本框弹出日期时间表格选择日期时间

    原文出处 (这是我从互联网上搜来的,感觉能满足各方面的需求.个人感觉挺不错的,所以后期修改了一下向大家推荐!) 效果图: html代码: <!DOCTYPE html PUBLIC " ...

  6. easyUI日期框返回到月份,选择日期也只到月份

    easyUI日期框返回到月份,选择日期也只到月份,不是原创,引用了园友的一篇文章,自己写下来,以便不时之需,谢谢. 1 $(function () { $('#date').datebox({ onS ...

  7. mysql的内建日期处理函数

    下面的表格列出了MySQL 中最重要的内建日期函数: 函数 描述 NOW() 返回当前的日期和时间 CURDATE() 返回当前的日期 CURTIME() 返回当前的时间 DATE() 提取日期或日期 ...

  8. http://www.layui.com/doc/modules/laydate.html实时通信\日期、==插件

    8520**ali chengyouli http://www.layui.com/doc/modules/laydate.html实时通信\日期.==插件

  9. JMeter 内置日期(时间)函数总结

    JMeter 内置日期(时间)函数总结   by:授客 QQ:1033553122 1. 测试环境 apache-jmeter-3.3 下载地址: http://jmeter.apache.org/c ...

随机推荐

  1. mysql 计算生日

    生日(DATE) 计算方法1: YEAR(CURDATE())-YEAR(birthday)-(RIGHT(CURDATE(),5)<RIGHT(birthday,5)) 计算方法2: year ...

  2. cp 命令详解

    作用:  cp 指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录下, 若同时指定多个文件或目录, 而最后的目的 ...

  3. [编织消息框架][JAVA核心技术]动态代理介绍

    由于java是种强类型静态语言,在执行时无法动态生成代码,静态语言基本都有这特性 动态生成代码有几种好处,也是弱类型语言的优点 1.部份逻辑可以实现热更新 2.远程调用实现非常适合 3.能动态生成扩展 ...

  4. JS通过decodeURIComponent函数解码

    在我们调用后台接口的时候,如果后端传过来的字段是编码过的,那需要使用decodeURIComponent函数进行解码显示 var test1="http://www.jianshu.com/ ...

  5. Java学习笔记11(面向对象四:多态)

    多态: 举例:描述一个事物的多种形态,如Student类继承了Person类,一个Student对象既是Student,又是Person 多态体现为:父类引用变量可以指向子类对象 多态的前提:必须有子 ...

  6. 【转】Tableau 9.3.8 desktop for Mac 中文破解

    tableau破解版本下载地址 安装步骤: 1. 编辑hosts 文件 在终端输入:sudo nano /etc/hosts 添加如下内容: 127.0.0.1 licensing.tableauso ...

  7. asp.net mvc 5 蛋疼的问题

    看图,debugger显示匹配路径没有错.    html开源码看 显示没有实现IController. 然而我的确实现了.  关闭vs 重启

  8. duilib基本流程

    duilib的基本流程如上图,通过解析一个xml文件,将文件中的内容渲染为窗口界面,这个解析过程由WindowImplBase类来完成. 基本框架如下: 1. 首先在公共头文件中加入如下内容: #in ...

  9. 如何将VS 2015中的项目上传到github

    最近开始慢慢接触github,现在希望将自己平时写的小程序,上传到github上,以便以后有个参考,在遇到同样问题的时候不至于想不起来怎么做而到处找别人的例子. VS 2015设置 首先下载跟gith ...

  10. linux之 NFS服务器与客户端的安装与配置

    今天实验室需要搭建NAS,我负责的是NFS的安装与配置,现将整理的文档分享一下: 参考一:Linux下rpm 安装包方式安装 http://linux.chinaunix.net/techdoc/be ...