element <el-date-picker> 只能选此刻之后的时间,限制到时分秒

318 阅读1分钟

问题描述:

用户只能选择当前时刻以后的时间,如果选择是当天的时间,时分秒需做限制,只能选择当前时间时分秒之后的时间,如果选择的是今天以后时间,就不需要判断时分秒

image.png

解决方法

使用el-date-picker属性 disabledDate 用来限制日期

使用el-date-picker属性 selectableRange 用来限制时分秒

话不多说,直接上代码

    <template>
        <el-form-item v-if="formData.pushType == '1'" label="推送时间:" prop="pushTime">
            <el-date-picker
             :picker-options="pickerOptions"  
             v-model="formData.pushTime" 
             type="datetime" 
             placeholder="请选择日期时间"
             > 
             </el-date-picker>
        </el-form-item>  
    </template>
    <script>
        import dayjs from 'dayjs';  //这里引用了dayjs
        export default {
         data() {
            return {
               pickerOptions: {
                    disabledDate(time) {
                        return time.getTime() < Date.now() - 8.64e7;  //- 8.64e7是为了可以选今天日期
                    },
                    selectableRange: '',
                },
            }
          },
          watch: {
            'formData.pushTime': {
                handler(newValue, oldValue) {
                    if (newValue) {
                        let nowDate = dayjs().format('YYYY-MM-DD HH:mm:ss');
                        let dt = nowDate.split(' ');
                        let st = '';
                        if (dayjs(newValue).format('YYYY-MM-DD HH:mm:ss').split(' ')[0] == dt[0]) {
                            // 如果是当天,选择的时间开始为此刻的时分秒
                            st = dt[1];
                            // 如果是当天(只有当日期改变时),默认选中时间为当前时间
                            if (dayjs(newValue).format('YYYY-MM-DD HH:mm:ss').split(' ')[0] != dayjs(oldValue).format('YYYY-MM-DD HH:mm:ss').split(' ')[0]) {
                                this.formData.pushTime = nowDate;
                            }
                        } else {
                            // 明天以及后面的时间从0时开始
                            st = '00:00:00';
                        }
                        this.pickerOptions.selectableRange =  [st + ' - 23:59:59'];
                    }
                }
            }
        },
                                                          
        }
    </script>