这几天碰到了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. lodash源码分析之NaN不是NaN

    暗恋之纯粹,在于不求结果,完全把自己锁闭在一个单向的关系里面. --梁文道<暗恋到偷窥> 本文为读 lodash 源码的第五篇,后续文章会更新到这个仓库中,欢迎 star:pocket-l ...

  2. Qt编写QUI皮肤生成器

    用Qt写项目写多了,为了满足不同客户的需求,需要定制不同样式的界面,QUI皮肤生成器应运而生.思考这个工具的架构花了一年时间,如何从复杂的配色方案中提取出共性,然后将共性转为具体的QSS文件.思考架构 ...

  3. BeanShell断言(一)

    在beanShell中直接可以调用的变量,无需加前缀. 1.log 打印日志 log.info(“在控制台打印日志”); 2.SampleResult 获取SampleResult对象,可以通过这个对 ...

  4. MVC WebAPI自动生成帮助文档(转)

    注意点: 1.mvc的控制器必须继承于ApiController,否则看不到的 2. 简单查看xml,根据第二步即可生成xml,可视感比较低,但是内容全部有,不限定于Api 以下为转载正文 ===== ...

  5. 微信小程序入门指南

    本文同步发布在 https://www.cssge.com 因为下个项目需要用微信小程序来开发,所以就找了小程序开发文档来研究.下面记录一下微信小程序的主要开发流程和语法. 账号注册 开发小程序的第一 ...

  6. 3.移植uboot-使板卡支持nor、nand

    在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下 ...

  7. Redis锁构造

    单线程与隔离性 Redis是使用单线程的方式来执行事务的,事务以串行的方式运行,也就是说Redis中单个命令的执行和事务的执行都是线程安全的,不会相互影响,具有隔离性. 在多线程编程中,对于共享资源的 ...

  8. Hadoop源码篇---解读Mapprer源码Input输入

    一.前述 上次分析了客户端源码,这次分析mapper源码让大家对hadoop框架有更清晰的认识 二.代码 自定义代码如下: public class MyMapper extends Mapper&l ...

  9. 使用ui-route实现多层嵌套路由

    一.预期实现效果: https://liyuan-meng.github.io/uiRouter-app/index.html (项目地址:https://github.com/liyuan-meng ...

  10. Macbook下安装管理MySQL

    下载安装MySQL 1.访问MySQL官网:http://dev.mysql.com/downloads/ 2.下载 MySQL Community Server: 3.Select Platform ...