1. layDate其中主要以: 年选择器、年月选择器、日期选择器、时间选择器、日期时间选择器五种类型的选择方式为基本核心, 并且均支持范围选择(即双控件)。内置强劲的自定义日期格式解析和合法校正机制, 含中文版和国际版, 主题简约却又不失灵活多样。由于内部采用的是零依赖的原生JavaScript编写, 因此又可作为独立组件使用。

2. 模块加载名称: laydate。

3. 基础参数选项

3.1. 通过核心方法: laydate.render(options)来设置基础参数。也可以通过方法: laydate.set(options)来设定全局基础参数。

4. elem - 绑定元素

4.1. 类型: String/DOM, 默认值: 无。

4.2. 必填项, 用于绑定执行日期渲染的元素, 值一般为选择器或DOM对象。

5. 作为独立组件使用

5.1. 下载layDate独立版本组件包:

grafana的日期组件 日期时间组件_日期时间

5.2. 引入laydate.js之后即可调用方法

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>使用layDate独立版</title>
  </head>
  <body>
    <input type="text" placeholder="请选择日期" id="test1">

    <script type="text/javascript" src="layDate-v5.0.9/laydate/laydate.js"></script>
    <script type="text/javascript">
      // 执行一个laydate实例
      laydate.render({
        elem: '#test1' // 指定元素
      });
    </script>
  </body>
</html>

5.3. 效果图

grafana的日期组件 日期时间组件_1024程序员节_02

6. type - 控件选择类型

6.1. 类型: String, 默认值: date。

6.2. 用于单独提供不同的选择器类型, 可选值如下表:

grafana的日期组件 日期时间组件_默认值_03

6.3. 实例

<script type="text/javascript">
	layui.use('laydate', function(){
		var laydate = layui.laydate;

		// 年选择器
	  	laydate.render({
		    elem: '#test1'
		    ,type: 'year'
	  	});

		// 年月选择器
	  	laydate.render({
		    elem: '#test2'
		    ,type: 'month'
	  	});			  	

	  	// 日期选择器
	  	laydate.render({
		    elem: '#test3'
		    ,type: 'date' // 默认, 可不填
	  	});

	  	// 时间选择器
	  	laydate.render({
		    elem: '#test4'
		    ,type: 'time'
	  	});
	  
	  	// 日期时间选择器
	  	laydate.render({
		    elem: '#test5'
		    ,type: 'datetime'
		});
	});
</script>

7. range - 开启左右面板范围选择

7.1. 类型: Boolean/String, 默认值: false。

7.2. 如果设置true, 将默认采用"-"分割。你也可以直接设置分割字符。五种选择器类型均支持左右面板的范围选择。

<script type="text/javascript">
	layui.use('laydate', function(){
		var laydate = layui.laydate;

		// 年范围选择器
	  	laydate.render({
		    elem: '#test6'
		    ,type: 'year'
		    ,range: true
	  	});

		// 年月范围选择器
	  	laydate.render({
		    elem: '#test7'
		    ,type: 'month'
		    ,range: '~'
	  	});			  	

	  	// 日期范围选择器
	  	laydate.render({
		    elem: '#test8'
		    ,type: 'date' // 默认, 可不填
		    ,range: '~'
	  	});

	  	// 时间范围选择器
	  	laydate.render({
		    elem: '#test9'
		    ,type: 'time'
		    ,range: true
	  	});
	  
	  	// 日期时间范围选择器
	  	laydate.render({
		    elem: '#test10'
		    ,type: 'datetime'
		    ,range: '~'
		});
	});
</script>

8. format - 自定义格式

8.1. 类型: String, 默认值: yyyy-MM-dd。

8.2. 通过日期时间各自的格式符和长度, 来设定一个你所需要的日期格式。layDate支持的格式如下:

grafana的日期组件 日期时间组件_grafana的日期组件_04

8.3. 通过上述不同的格式符组合成一段日期时间字符串, 可任意排版, 如下所示:

grafana的日期组件 日期时间组件_grafana的日期组件_05

8.4. 实例

<script type="text/javascript">
	layui.use('laydate', function(){
		var laydate = layui.laydate;

		// 年格式化
	  	laydate.render({
		    elem: '#test11'
		    ,type: 'year'
		    ,format: 'yyyy年'
	  	});

		// 年月格式化
	  	laydate.render({
		    elem: '#test12'
		    ,type: 'month'
		    ,format: 'yyyy年MM月'
	  	});			  	

	  	// 日期格式化
	  	laydate.render({
		    elem: '#test13'
		    ,type: 'date' // 默认, 可不填
		    ,format: 'yyyy年MM月dd日'
	  	});

	  	// 时间格式化
	  	laydate.render({
		    elem: '#test14'
		    ,type: 'time'
		    ,format: '北京时间: HH时mm分ss秒'
	  	});
	  
	  	// 日期时间格式化
	  	laydate.render({
		    elem: '#test15'
		    ,type: 'datetime'
		    ,format: 'yyyy年MM月dd日 HH时mm分ss秒'
		});
	});
</script>

9. value - 初始值

9.1. 类型: String, 默认值: new Date()。

9.2. 支持传入符合format参数设定的日期格式字符, 或者new Date()。

10. isInitValue - 初始值填充

10.1. 类型: Boolean, 默认值: true。

10.2. 用于控制是否自动向元素填充初始值(需配合value参数使用)。

11. min/max - 最小/大范围内的日期时间值

11.1. 类型: string, 默认值: min: '1900-1-1'、max: '2099-12-31'。

11.2. 设定有限范围内的日期或时间值, 不在范围内的将不可选中。这两个参数的赋值非常灵活, 主要有以下几种情况:

grafana的日期组件 日期时间组件_grafana的日期组件_06

12. trigger - 自定义弹出控件的事件

12.1. 类型: String, 默认值: focus。

12.2. 如果绑定的元素非输入框, 则默认事件为: click。

13. show - 默认显示

13.1. 类型: Boolean, 默认值: false。

13.2. 如果设置: true, 则控件默认显示在绑定元素的区域。通常用于外部事件调用控件。

14. position - 定位方式

14.1. 类型: String, 默认值: absolute。

14.2. 用于设定控件的定位方式, 有以下三种可选值:

grafana的日期组件 日期时间组件_grafana的日期组件_07

15. zIndex - 层叠顺序

15.1. 类型: Number, 默认值: 66666666。

15.2. 一般用于解决与其它元素的互相被遮掩的问题。如果position参数设为static时, 该参数无效。

16. showBottom - 是否显示底部栏

16.1. 类型: Boolean, 默认值: true。

16.2. 如果设置false, 将不会显示控件的底部栏区域。

17. btns - 工具按钮

17.1. 类型: Array, 默认值: ['clear', 'now', 'confirm']。

17.2. 右下角显示的按钮, 会按照数组顺序排列, 内置可识别的值有: clear、now、confirm。

18. lang - 语言

18.1. 类型: String, 默认值: cn。

18.2. 我们内置了两种语言版本: cn(中文版)、en(国际版, 即英文版)。

19. theme - 主题

19.1. 类型: String, 默认值: default。

19.2. theme的可选值有: default(默认简约)、molv(墨绿背景)、grid(格子主题)。

19.3. 另外, 你还可以传入其它字符, 如: theme: 'xxx', 那么控件将会多出一个class="laydate-theme-xxx"的CSS类, 以便于你单独定制主题。

20. calendar - 是否显示公历节日

20.1. 类型: Boolean, 默认值: false。

20.2. layui内置了一些我国通用的公历重要节日, 通过设置true来开启。国际版不会显示。

21. mark - 标注重要日子

21.1. 类型: Object, 默认值: 无。

21.2. calendar参数所代表的公历节日更多情况下是一个摆设。因此, 我们还需要自定义标注重要日子, 比如: 结婚纪念日?日程表等?它分为以下两种:

grafana的日期组件 日期时间组件_选择器_08

22. 控件初始打开的回调-ready

22.1. 控件在打开时触发, 回调返回一个参数: 初始的日期时间对象。

ready: function(date){
	console.log(date);
}

23. 日期时间被切换后的回调-change

23.1. 年月日时间被切换时都会触发。回调返回三个参数, 分别代表: 生成的值、日期时间对象、结束的日期时间对象。

change: function(value, date, endDate){
	console.log(value, date, endDate);
}

24. 控件选择完毕后的回调-done

24.1. 点击日期、清空、现在、确定均会触发。回调返回三个参数, 分别代表: 生成的值、日期时间对象、结束的日期时间对象。

done: function(value, date, endDate){
	console.log(value, date, endDate);
}

25. 弹出控件提示

25.1. 事实上, 执行核心方法laydate.render(options)会返回一个当前实例对象。其中包含一些成员属性和方法, 比如: hint方法。

var ins = laydate.render({
    elem: '#test21'
    ,type: 'datetime'
    ,change: function(value, date, endDate){
    	ins.hint(value); // 在控件上弹出value值
    	console.log(value, date, endDate);
    }
});

26. 其它方法

grafana的日期组件 日期时间组件_选择器_09

27. 例子

27.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>日期模块 - layui</title>

		<link rel="stylesheet" href="layui/css/layui.css">
		<script type="text/javascript" src="layui/layui.js"></script>
	</head>

	<body>
		<big>年选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test1">
		</div>

		<big>年月选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test2">
		</div>

		<big>日期选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test3">
		</div>

		<big>时间选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test4">
		</div>

		<big>日期时间选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test5">
		</div>
		<br /><br />

		<big>年范围选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test6">
		</div>

		<big>年月范围选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test7">
		</div>

		<big>日期范围选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test8">
		</div>

		<big>时间范围选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test9">
		</div>

		<big>日期时间范围选择器:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test10">
		</div>
		<br /><br />
		
		<big>年格式化:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test11">
		</div>

		<big>年月格式化:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test12">
		</div>

		<big>日期格式化:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test13">
		</div>

		<big>时间格式化:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test14">
		</div>

		<big>日期时间格式化:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test15">
		</div>
		<br /><br />

		<big>墨绿主题:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test16">
		</div>

		<big>自定义颜色背景:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test17">
		</div>

		<big>格子主题:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test18">
		</div>
		<br /><br />

		<big>定位fixed:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test19">
		</div>
		<br /><br />

		<h2>直接嵌套在指定容器中:</h2>
		<div class="layui-block" id="test20"></div>
		<br /><br />

		<big>标注重要日子:</big>
		<div class="layui-inline">
  			<input type="text" class="layui-input" id="test21">
		</div>
		<br /><br />

		<h2>获取某年某月的最后一天:</h2>
		<div style="width: 300px; height: 100px; background: pink;" class="layui-inline" id="test22"></div>
		<br /><br />

		<h2>获取当前年某月的最后一天:</h2>
		<div style="width: 300px; height: 200px; background: green;" class="layui-inline" id="test23"></div>

		<script type="text/javascript">
			layui.use(['laydate', 'jquery'], function(){
				var laydate = layui.laydate
					,$ = layui.jquery;

				// 年选择器
			  	laydate.render({
				    elem: '#test1'
				    ,type: 'year'
			  	});

				// 年月选择器
			  	laydate.render({
				    elem: '#test2'
				    ,type: 'month'
			  	});			  	

			  	// 日期选择器
			  	laydate.render({
				    elem: '#test3'
				    ,type: 'date' // 默认, 可不填
				    ,min: -7
  					,max: 7
			  	});
  
			  	// 时间选择器
			  	laydate.render({
				    elem: '#test4'
				    ,type: 'time'
			  	});
			  
			  	// 日期时间选择器
			  	laydate.render({
				    elem: '#test5'
				    ,type: 'datetime'
				    ,min: '2021-1-1 00:00:00'
  					,max: '2021-12-31 23:59:59'
  				});

  				// 年范围选择器
			  	laydate.render({
				    elem: '#test6'
				    ,type: 'year'
				    ,range: true
			  	});

				// 年月范围选择器
			  	laydate.render({
				    elem: '#test7'
				    ,type: 'month'
				    ,range: '~'
			  	});			  	

			  	// 日期范围选择器
			  	laydate.render({
				    elem: '#test8'
				    ,type: 'date' // 默认, 可不填
				    ,range: '~'
				    ,min: (new Date()).getTime() - 86400000 * 10
				    ,max: (new Date()).getTime() + 86400000 * 10
			  	});
  
			  	// 时间范围选择器
			  	laydate.render({
				    elem: '#test9'
				    ,type: 'time'
				    ,range: true
			  	});
			  
			  	// 日期时间范围选择器
			  	laydate.render({
				    elem: '#test10'
				    ,type: 'datetime'
				    ,range: '~'
  				});

  				// 年格式化
			  	laydate.render({
				    elem: '#test11'
				    ,type: 'year'
				    ,format: 'yyyy年'
				    ,value: new Date()
				    ,isInitValue: true
			  	});

				// 年月格式化
			  	laydate.render({
				    elem: '#test12'
				    ,type: 'month'
				    ,format: 'yyyy年MM月'
				    ,value: new Date()
				    ,isInitValue: true
			  	});			  	

			  	// 日期格式化
			  	laydate.render({
				    elem: '#test13'
				    ,type: 'date' // 默认, 可不填
				    ,format: 'yyyy年MM月dd日'
				    ,value: new Date()
				    ,isInitValue: true
			  	});
  
			  	// 时间格式化
			  	laydate.render({
				    elem: '#test14'
				    ,type: 'time'
				    ,format: '北京时间: HH时mm分ss秒'
				    ,value: new Date()
				    ,isInitValue: true
			  	});
			  
			  	// 日期时间格式化
			  	laydate.render({
				    elem: '#test15'
				    ,type: 'datetime'
				    ,format: 'yyyy年MM月dd日 HH时mm分ss秒'
				    ,value: new Date()
				    ,isInitValue: true
  				});

				// 墨绿主题
			  	laydate.render({
				    elem: '#test16'
				    ,type: 'year'
				    ,theme: 'molv'
				    ,lang: 'en'
				    ,trigger: 'focus'
			  	});

				// 自定义颜色背景
			  	laydate.render({
				    elem: '#test17'
				    ,type: 'month'
				    ,theme: '#393D49'
				    ,lang: 'en'
				    ,showBottom: false
			  	});			  	

			  	// 格子主题
			  	laydate.render({
				    elem: '#test18'
				    ,type: 'date' // 默认, 可不填
				    ,theme: 'grid'
				    ,lang: 'en'
				    ,showBottom: false
			  	});

			  	laydate.render({
		      		elem: '#test19'
		      		,type: 'time'
		      		,position: 'fixed'
		    	});
			  
			  	// 直接嵌套在指定容器中
			    laydate.render({
				    elem: '#test20'
				    ,type: 'datetime'
				    ,position: 'static'
				    ,calendar: true
			  	});

				// 标记重要日子
			    var ins = laydate.render({
				    elem: '#test21'
				    ,type: 'datetime'
				    ,mark: { 
				    	'0-8-15': '中秋节' // 0即代表每一年
				    	,'0-0-28': '爬山' // 0-0即代表每年每月
				    	,'2020-1-1': '结婚'
				    } 
				    ,ready: function(date){
				    	console.log(date);
				    }
				    ,change: function(value, date, endDate){
				    	ins.hint(value); // 在控件上弹出value值
				    	console.log(value, date, endDate);
				    }
				    ,done: function(value, date, endDate){
				    	console.log(value, date, endDate);
				    }
			  	});

			  	$('#test22').text('今年2月有' + laydate.getEndDate(2) + '天');
			  	$('#test23').text('2020年2月有' + laydate.getEndDate(2, 2020) + '天');
			});
		</script>
	</body>
</html>

27.2. 效果图

grafana的日期组件 日期时间组件_日期时间_10