iview时间范围设置
一、两个输入框 <template> <Row> <Col span="11"> <Form-item label="登记时间" prop="inputTime"> <DatePicker :value="caseInfo.inputTime" :options="disabledInputTime" @on-change="changeAcceptTime" type="date" placeholder="请选择登记时间" style="width: 220px" ></DatePicker> </Form-item> </Col> <Col span="12"> <Form-item label="案件侦办到期时间" prop="casespyEndtime" :label-width="185" > <DatePicker :value="caseInfo.casespyEndtime" :options="disabledCasespyEndtime" @on-change="changeEndtime" type="date" placeholder="请选择到期时间" style="width: 220px" ></DatePicker> </Form-item> </Col> </Row> </template> <script> function getCurrentDate() { let myDate = new Date(); let year = myDate.getFullYear(); let month = myDate.getMonth() + 1; let date = myDate.getDate(); let nowDate = `${year}-${month}-${date}`; return nowDate; } let currentDate = getCurrentDate(); let disabledDay = GetNextMonthDay(currentDate, 6); let disabledDayTime = new Date(disabledDay).getTime(); /** *获取下一个月的输入日期 *{param:DateTime} date 输入日期(YYYY-MM-DD) *{param:number } monthNum 月数 */ function GetNextMonthDay(date, monthNum) { var dateArr = date.split("-"); var year = dateArr[0]; //获取当前日期的年份 var month = dateArr[1]; //获取当前日期的月份 var day = dateArr[2]; //获取当前日期的日 var days = new Date(year, month, 0); days = days.getDate(); //获取当前日期中的月的天数 var year2 = year; var month2 = parseInt(month) + parseInt(monthNum); if (month2 > 12) { year2 = parseInt(year2) + parseInt(parseInt(month2) / 12 == 0 ? 1 : parseInt(month2) / 12); month2 = parseInt(month2) % 12; } var day2 = day; var days2 = new Date(year2, month2, 0); days2 = days2.getDate(); if (day2 > days2) { day2 = days2; } if (month2 < 10) { month2 = "0" + month2; } var t2 = year2 + "-" + month2 + "-" + day2; return t2; } export default { name: "ControlCaseList", data() { return { caseInfo: { inputTime: currentDate, casespyEndtime: disabledDay, }, disabledInputTime: { disabledDate(date) { return date && date.valueOf() < Date.now() - 86400000; }, }, disabledCasespyEndtime: { disabledDate(date) { return ( (date && date.valueOf() < Date.now() - 86400000) || date.valueOf() > disabledDayTime ); }, }, } }, methods: { changeAcceptTime(value) { this.caseInfo.inputTime = value; }, changeEndtime(value) { this.caseInfo.casespyEndtime = value; }, }, mounted() { }, watch: { "caseInfo.inputTime"() { let self = this; this.disabledCasespyEndtime = { disabledDate(date) { if (self.caseInfo.inputTime) { return ( (date && date.valueOf() < new Date(self.caseInfo.inputTime).getTime()) || date.valueOf() > disabledDayTime ); } }, }; }, "caseInfo.casespyEndtime"() { let self = this; this.disabledInputTime = { disabledDate(date) { if (self.caseInfo.casespyEndtime) { return ( date && (new Date(self.caseInfo.casespyEndtime).getTime() < date.valueOf() || date.valueOf() < Date.now() - 86400000) ); } }, }; }, }, }; </script> 二、一个输入框网上找的 <DatePicker ref="date" @click.native="onPick" type="datetimerange" :options = "options" placeholder="请选择日期" :clearable="false" v-model="searchDate" style="width: 280px;margin-right: 10px"></DatePicker> // 动态限制日期时间选择器的可选范围 function disabledDate_start_end_native(value, from) { const startTime = new Date(from); const endTime = new Date(from); startTime.setDate(from.getDate()); endTime.setDate(from.getDate() + 6); return !(value >= startTime && value <= endTime) || (value && (value.valueOf() > Date.now() - 86400000)); } methods:{ //设置时间 onPick() { const target = (this.$refs.date).$refs.pickerPanel; console.log('target', target) const { from, to } = target.rangeState; target.handlePickClick = (() => { const selecting = target.rangeState; const from1 = target.rangeState.from; if (from1 && selecting) { this.options = { disabledDate(value) { return disabledDate_start_end_native(value, from1); }, }; } }); if (from && !to) { this.options = { disabledDate(value) { return disabledDate_start_end_native(value, from); }, }; } else { this.options = { disabledDate(value) { return value && (value.valueOf() > Date.now() - 86400000); }, }; } }, }, data() { return { options:{ disabledDate (date) { return date && date.valueOf() > new Date(); } }, //开始时间,结束时间 searchDate:[], } }