iView 框架 日期时间选择器 设置时间 有时分限制

422 阅读7分钟

记录工作中踩的坑 如果有帮助记得点赞

iview框架  time-picker-options有几个参数分别是disabledHours、disabledMinutes、disabledSeconds

现在有一个需求 不能超过当前的时间 但是设置当天的时候,选择时和秒的时候 切换的时候会限制错误

结合自己的业务写了下面的解决方案

代码

<DatePicker :value="data.time"  type="datetime" format="yyyy-MM-dd HH:mm" :options="changeOptions" :timePickerOptions="timePickerOptions" placeholder="请选择时间" @on-change="handleDisHours">

data() {

return {

   changeOptions: {

      disabledDate(date) {

        return date && date.valueOf() > Date.now();

      ,

   },

  timePickerOptions: { disabledHours: [], disabledMinutes: [], steps: [1, 1, 60] },

}

methods: {

handleDisHours(val) {

// 获得当前的小时 从当前的小时开始禁用后面

const hourNum = Number(new Date().getHours());

// 得到当天

const curDate = getFormatTime();

//判断选中是否当前当天,只有当天才进行操作限制

if (val && curDate != val.substr(0, 10)) {

this.timePickerOptions.disabledHours = [];

this.timePickerOptions.disabledMinutes = [];

return;

}

// 此处循环出数组可以用这个方法let

// 生成从下标为多少开始的 0-23的时的数组 生成不能选的小时

const hourArrNum = 23 - hourNum;

let hourArr = new Array(hourArrNum).fill(hourArrNum).map((e, i) => i + hourNum + 1);

this.timePickerOptions.disabledHours = hourArr;

this.handleDisMinutes(val, hourNum);

},

handleDisMinutes(val, hourMax) {

let checkHour = new Date(val).getHours();

// 判断是否选中的是当前时间的小时 如果是 就要进行分的判断 不是就重置

if (checkHour == hourMax) {

const minsNum = Number(new Date().getMinutes());

// 从多少生成多少位数组

const minArrNum = 59 - minsNum;

// 生成从下标为多少开始的 0-59的时的数组 生成

let minArr = new Array(minArrNum).fill(minArrNum).map((e, i) => i + minsNum + 1);

this.timePickerOptions.disabledMinutes = minArr;

this.timePickerOptions = JSON.parse(JSON.stringify(this.timePickerOptions));

} else {

this.timePickerOptions.disabledMinutes = [];

}

},

}