zoukankan      html  css  js  c++  java
  • vue中 element 中el-date-picker时间限制详解

    el-date-picker 在搜索页面中一般不限制开始时间和结束时间,但是在选择开始时间后选择的结束时间不能大于开始时间。要求就是开始时间决定结束时间,结束时间限制开始时间。

    <el-form-item label="开始时间">
                        <el-date-picker
                                v-model="form.startTime"
                                type="datetime"
                                value-format="yyyy-MM-dd HH:mm:ss"
                                placeholder="选择日期时间"
                                :picker-options="searchPickerOptionsStart"
                                @change="searchChangeEnd"
                        >
                        </el-date-picker>
                    </el-form-item>
    
                    <el-form-item label="结束时间" >
                        <el-date-picker
                                v-model="form.endTime"
                                type="datetime"
                                value-format="yyyy-MM-dd HH:mm:ss"
                                placeholder="选择日期时间"
                                :picker-options="searchPickerOptionsEnd"
                                @change="searchChangeStart"
                        >
                        </el-date-picker>
                    </el-form-item>

    在绑定@change时候时间不要带括号,不然无法获取当前选择之后的值,:picker-options是绑定的时间规则,开始默认不做限制

    注意:在return time.getTime()>new Date(this.form.endTime).getTime() ;中>是代表当前时间小于等于结束时间可选,如果是>=是代表当前时间小于结束时间可选,当天时间不可点击。》

     searchPickerOptionsStart:{},
     searchPickerOptionsEnd:{},
    
    //搜索的结束时间限制开始时间,初始化时间都不限制
    searchChangeStart(value) {
        if(!value){//为了解决点击输入框内的×之后时间限制没有变化,不能自由选择,这里利用设置了2999年之后都可选
            // 可通过箭头函数的方式访问到this
            this.searchPickerOptionsStart = Object.assign({}, this.searchPickerOptionsStart, {
                // 可通过箭头函数的方式访问到this
                disabledDate: (time) => {
                    return time.getTime()>=new Date('2999-12-30 23:59:59').getTime()  ;
                }
            })
            return;
        }
        this.searchPickerOptionsStart = Object.assign({}, this.searchPickerOptionsStart, {
            // 可通过箭头函数的方式访问到this
            disabledDate: (time) => {
                return time.getTime()>new Date(this.form.endTime).getTime()  ;
            }
        })
    },
    //开始时间 控制结束时间
    searchChangeEnd() {
        // console.log(new Date(this.addFormList[0].startTime).getTime());
        this.searchPickerOptionsEnd = Object.assign({}, this.searchPickerOptionsEnd, {
            disabledDate: (time) => {
                return time.getTime()<new Date(this.form.startTime).getTime();
            }
        })
    },

    在添加的时候开始时间和结束时间不能小于今天,但是可以选今天的日期,不同的时间段,开始时间小于结束时间,但是可以选择和结束时间当天一样的日期不同的时间段。这里开始时间和结束时间相互约制,但都可以选择同一天。

    这里的time.getTime()<Date.now()-8.64e7就是说可以让选择时间往后推一天,可以选择当天的日期。如果往前推一天就是+8.64e7。

     //添加结束时间限制开始时间 初始化都不能选今天以前的时间
                addChangeStart(value){
                    if(!value){
                        this.pickerOptionsStart = Object.assign({}, this.pickerOptionsStart, {
                            disabledDate: (time)=>{
                                return time.getTime() <Date.now()-8.64e7//选当前时间之后的时间
                            }
                        })
                        return;
                    }
    
                    this.pickerOptionsStart = Object.assign({}, this.pickerOptionsStart, {
                        // 可通过箭头函数的方式访问到this
                        disabledDate: (time) => {
                            return time.getTime()>new Date(this.addFormList[0].endTime).getTime()|| time.getTime()<Date.now()-8.64e7 ;
                        }
                    })
                },
                //开始时间 控制结束时间
                addChangeEnd() {
                    this.pickerOptionsEnd = Object.assign({}, this.pickerOptionsEnd, {
                        disabledDate: (time) => {
                            return time.getTime()<new Date(this.addFormList[0].startTime).getTime() || time.getTime()<Date.now()-8.64e7;
                        }
                    })
                },

    注意:插件在同一天内没有限制结束时间段(hh:mm:ss)不能大于开始时间段(hh:mm:ss),所以在这里我自己写了一个判断限制。如果开始时间大于结束时间的话那就返回false,否则返回true。

    // 控制时分秒比较大小
    function timeComparison(startTime,endTime){
        if(new Date(startTime).getTime()>=new Date(endTime).getTime()){
            return false;
        }else{
            return true;
        }
    }

     最后还有一种就是element的时间连选状态

     <el-form-item label="上传时间">
                        <div class="block">
                            <el-date-picker
                                    v-model="form.upTime"
                                    value-format="yyyy-MM-dd HH:mm:ss"
                                    type="datetimerange"
                                    align="right"
                                    unlink-panels
                                    range-separator="至"
                                    start-placeholder="开始日期"
                                    end-placeholder="结束日期"
                                    :picker-options="pickerOptions">
                            </el-date-picker>
                        </div>
                    </el-form-item>

     pickerOptions: {
                        shortcuts: [{
                            text: '最近一周',
                            onClick(picker) {
                                const end = new Date();
                                const start = new Date();
                                start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
                                picker.$emit('pick', [start, end]);
                            }
                        }, {
                            text: '最近一个月',
                            onClick(picker) {
                                const end = new Date();
                                const start = new Date();
                                start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
                                picker.$emit('pick', [start, end]);
                            }
                        }, {
                            text: '最近三个月',
                            onClick(picker) {
                                const end = new Date();
                                const start = new Date();
                                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                                picker.$emit('pick', [start, end]);
                            }
                        }]
                    },
    v-model="form.upTime",代表绑定的值选择之后form.upTime是一个数组,数组中的form.upTime[0]和form.upTime[1]分别是代表开始时间和结束时间。但是当你清空之后这个数组就不存在了,而不是为空数组。

    如下图中点击×之后输入框中的日期就会清空但是保留的日期

     

    不停学习,热爱是源源不断的动力。
  • 相关阅读:
    第01组 Beta冲刺(2/5)
    第01组 beta冲刺(1/5)
    软工实践个人总结
    第01组 每周小结(3/3)
    第01组 每周小结(2/3)
    第01组 每周小结 (1/3)
    第01组_Beta冲刺总结
    第01组 Beta冲刺(5-5)
    第01组 Beta冲刺(4-5)
    第01组 Beta冲刺(3-5)
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/14766068.html
Copyright © 2011-2022 走看看