laydate自定义范围选择

项目场景:

项目是以周的形式进行填报,查询筛选的时候,希望以周为范围进行筛选查询

问题描述

问题一:laydate的日期格式设置为yyyy-MM-dd~yyyy-MM-dd,但是input框中的值并不是展示的当前周的时间,展示的是当前日期控件选中的日期,(注意:只有layui.js的版本是2.6.8及以下的才会出现这种情况。效果图如下:

期望的效果图如下:

问题二:laydate左下角展示的选中的日期不是以周的形式展示的,以当前选中的日期进行展示的,效果图如下:

期望的效果图:


原因分析:

问题一:通过在done函数里面打印发现,给inputDom赋值了,并且打印inputDom的值也是赋值成功的,但是页面上显示的确实当前选中的日期值。

通过setTimeout里面打印,发现刚被赋值的inputDom的值又被修改成当前选中的日期,于是在setTimeout里面更新inputDom的值就可以解决。(2.6.8及以下的版本layui.js有这个问题,从2.6.9开始就修复了这问题。)

 done: function (value, date, endDate) {
     let date_arr=value.split('~')
     $('#start-date').val(getWeekRangeByDate(date_arr[0]))
     $('#end-date').val(getWeekRangeByDate(date_arr[date_arr.length-1]))

      console.log($('#start-date').val()); //2024-06-17~2024-06-23
      console.log($('#end-date').val());//2024-07-15~2024-07-21

      timer=setTimeout(()=>{
           console.log($('#start-date').val()); //2024-06-19~2024-06-19
           console.log($('#end-date').val());//2024-07-19~2024-07-19
      })
}

问题二:同问题一一样

解决方案:

整体代码如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8" />
    <title>laydate自定义选择的范围</title>
    <link rel="stylesheet" href="./layui/js/layui.css" />
    <style>
        .layui-input {
            width: 280px;
        }

        .layui-form-mid {
            margin-left: 10px;
        }
    </style>
</head>

<body>
    <div class="layui-card">
        <div class="layui-card-body">
            <form class="layui-form">
                <div class="layui-form-item">
                    <label class="layui-form-label">缺陷时间</label>
                    <div class="layui-inline" id="test-range" style="display: flex;">
                        <input type="text" name="start_week" class="layui-input" id="start-date" placeholder="请选择开始时间"
                            autocomplete="off">
                        <div class="layui-form-mid">至</div>
                        <input type="text" name="end_week" class="layui-input" id="end-date" placeholder="请选择结束时间"
                            autocomplete="off">
                    </div>
                </div>

            </form>
        </div>
    </div>
    <script src="./layui/layui.js"></script>
    <script>
        layui.use(["table", "jquery", "laydate", "form", "layer"], function () {
            var table = layui.table;
            let $ = layui.jquery;
            let laydate = layui.laydate;
            let form = layui.form;
            
            //根据当前传入的日期,返回对应周的日期
            function getWeekRangeByDate(value) {
                let today = ''
                if (value == '') {
                    today = new Date()
                } else {
                    today = new Date(value.substring(0, 10))
                }

                let weekday = today.getDay()
                let monday = ""
                let sunday = ''
                if (weekday == 0) {
                    monday = new Date(1000 * 60 * 60 * 24 * (weekday - 6) + today.getTime())
                    sunday = today
                } else {
                    monday = new Date(1000 * 60 * 60 * 24 * (1 - weekday) + today.getTime())
                    sunday = new Date(1000 * 60 * 60 * 24 * (7 - weekday) + today.getTime())
                }
                let month = monday.getMonth() + 1
                month = month < 10 ? '0' + month : month

                let day1 = monday.getDate()
                day1 = day1 < 10 ? '0' + day1 : day1
                let start = monday.getFullYear() + '-' + month + '-' + day1

                let month2 = sunday.getMonth() + 1
                month2 = month2 < 10 ? '0' + month2 : month2

                let day2 = sunday.getDate()
                day2 = day2 < 10 ? '0' + day2 : day2
                let end = sunday.getFullYear() + '-' + month2 + '-' + day2

                return start + '~' + end


            }
            let start_date = ''
            let end_date = ""
            let timer1 = 0
            let timer2 = 0
            let timer3 = 0
            // 日期选择范围:
            let picker = laydate.render({
                elem: '#test-range',
                type: 'date',
                format: 'yyyy-MM-dd~yyyy-MM-dd',
                btns: ['clear', 'confirm'],
                range: ['#start-date', '#end-date'],
                ready: function (date) {
                   let start_date=''
                   let end_date=''
                   $('td.layui-this').each((index,item)=>{
                        if(index==0){
                            start_date=item.getAttribute('lay-ymd')
                        }else{
                            end_date=item.getAttribute('lay-ymd')
                        }
                   })
                    timer1 = setTimeout(() => {
                        $('.layui-laydate-preview').text(getWeekRangeByDate(start_date) + '-' + getWeekRangeByDate(end_date))
                        clearTimeout(timer1)
                    });



                },
                change: function (value, date, endDate) {
                    let date_arr=value.split('~')
                    timer2 = setTimeout(() => {
                        $('.layui-laydate-preview').text(getWeekRangeByDate(date_arr[0]) + '-' + getWeekRangeByDate(date_arr[date_arr.length-1]))
                        clearTimeout(timer2)
                    });


                },
                done: function (value, date, endDate) {

                    // 2.6.9及以上的版本
                    let date_arr=value.split('~')
                    $('#start-date').val(getWeekRangeByDate(date_arr[0]))
                    $('#end-date').val(getWeekRangeByDate(date_arr[date_arr.length-1]))

                    // 2.6.9以下的版本
                    timer3=setTimeout(()=>{
                        $('#start-date').val(getWeekRangeByDate(date_arr[0]))
                        $('#end-date').val(getWeekRangeByDate(date_arr[date_arr.length-1]))
                        clearTimeout(timer3)
                    })

                   
                }
            })

        })


    </script>
</body>

</html>

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值