改写layui日期和时间选择器

497 阅读1分钟

前段时间遇到一个需求:选择日期和时间,周末禁止选择,自定义禁止时间选择。如图

image.png

我鬼使神差竟然用了layui,遇到了好多坑,记录下这次的经历,好记性不如烂笔头,下次可以回来复制黏贴,哈哈哈。

1. 添加禁止class:laydate-disabled

经过观察,禁止选择的日期,class上会有 laydate-disabled

image.png

(1) 第一版:遍历所有日期.layui-laydate-content td

当日期 等于 2023-1-10 ,

则添加 class:laydate-disabled;

2023-1-10 的这一天就不能被选择了。

image.png

(2) 第二版:周末禁止选择,自定义禁止时间选择。

强制修改layui的mark(标记重要的日子),用来当成自定义禁止的日期。

image.png

当来到第二版的时候,非常好,一度以为已经实现了功能,NONONONONONONONONONO, 有不可逆反的BUG,啥bug我忘了,哈哈哈哈哈。

image.png

2. 修改官方layui的日期和时间选择器的js

修改代码github地址: GitHub - zstings/laydate: 一款被广泛使用的高级 Web 日历组件,完全开源无偿且颜值与功能兼备,足以应对日期相关的各种业务场景

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./laydate/theme/default/laydate.css">
</head>

<body>
    <input type="text" id="demoTest" placeholder="yyyy-MM-dd">
    <script src="./laydate/laydate--.js"></script>
    <script>
        laydate.render({
            elem: '#demoTest',
            type: 'datetime',

            min: '2023-01-05', // 最小日期
            max: '2023-01-15', // 最大日期

            disabled: ['2023-01-08', '2023-01-13'], // 对特定日期禁用

            weekend: 'disabled', // 禁用周六日

            timesOption: [  // 自定义配置时分秒
                [9, 10, 11, 15, 16, 17, 18],   
                [0, 30]
            ], 
            btns: ['clear', 'confirm'],
            ready: function (date) {
            },
            change: function (value, date) {
            }
        });
    </script>


</body>

</html>

layui+jq,绝配贼好用,很可惜已经不维护了,有些坑:比如最大时间和最小时间的bug;layui.js为啥给变量小时分秒给一个常量0,0,0,而不是动态赋值。 image.png