最近項目里要做一個自定義選擇時間范圍的需求,說下需求,1.開始時間只能選擇當天之前兩個月的區間,2.結束時間只能是在開始時間的基礎上的一個月跨度,且不能超過今天以及未來時間
看了element 的時間選擇器里邊的demo,有個選擇時間區間的控件,像這樣的
但他選擇任何一個的時候,都會彈出兩個時間框,放在項目中,無奈都嫌它太丑,只能還用單個的那種,像這樣
兩個控件是單獨分開的,
話不多說 上代碼
<span class="zhiTitle">最近發現時間</span> <span class="timeChange"> <span class="timeChangeSpan"> <el-date-picker class="zhiTime" type="date" v-model="form.lastDiscoveryStartTime" value-format="yyyy-MM-dd" :picker-options="pickerOptionsStart" @change="timeOptions" ></el-date-picker> </span> <span class="zhiCenter">—</span> <span class="timeChangeSpan"> <el-date-picker class="zhiTime" type="date" v-model="form.lastDiscoveryEndTime" :picker-options="pickerOptionsEnd" value-format="yyyy-MM-dd" @focus="timeOptionsEnd" ref="lastDiscoveryEndTime" ></el-date-picker> </span> </span> data() { return { pickerOptionsStart: { disabledDate(time) { return time.getTime() > Date.now() - 8.64e7 || time.getTime() < Date.now() - 60 * 24 * 60 * 60 * 1000 } }, pickerOptionsEnd: {}, } } methods: { // 當開始時間改變時 就讓結束時間清空 timeOptions() { this.form.lastDiscoveryEndTime = '' }, timeOptionsEnd() { // 若不填開始時間的值,先選擇結束時間就提示用戶填寫開始時間 if (this.form.lastDiscoveryStartTime == '' || this.form.lastDiscoveryStartTime == null ) { // 不讓彈出結束時間框 this.$refs.lastDiscoveryEndTime.pickerVisible = false return this.$message.warning('請填寫開始時間') } else { // 若開始時間填寫 結束時間的彈出選擇時間框正常顯示 this.$refs.lastDiscoveryEndTime.pickerVisible = true } let that = this // 結束時間是在開始時間的基礎上去建立可選范圍 this.pickerOptionsEnd = { disabledDate(time) { let dataLast = new Date(that.form.lastDiscoveryStartTime).getTime() return ( // 不超過一個月且不能選當天且可以選和開始時間一樣的日期 time.getTime() > dataLast + 31 * 24 * 60 * 60 * 1000 || time.getTime() < dataLast - 8.64e7 || time.getTime() > Date.now() - 8.64e7 ) } } } }
使用這個時間框有些問題
選擇完時間之后,再清除數據時,他的值就不是空,而是null,所以要注意
:picker-options="pickerOptionsStart" 這個方法里邊的禁用的 time.getTime() 其實就是 選擇面板里邊的顯示的所有時間,時間戳減去8.64e7 其實和24*60*60*100一樣,都是一天的時間
想要什么樣的時間范圍按這種方法自行決定就行