根據動態月份限制日期只能選擇選中月的日期,其他月日期禁用
阿新 • • 發佈:2022-03-11
參考文件連結:https://zhuanlan.zhihu.com/p/391487267
1.目前是設定只能選擇當前月日期,當月之前和當月之後禁用
<el-date-picker v-model="form.enableStartTime" :picker-options="setMonthDisabled" type="date" placeholder="選擇日期" value-format="yyyy-MM-dd" :clearable="false"> </el-date-picker>
return { form:{ month:'',// 月份,格式yyyyMM enableStartTime:'',// 有效期-開始 }, setMonthDisabled:{ disabledDate(time){ // 獲取當前的月份資訊 const date=new Date() // 獲取當前的時間基本資訊,值是這樣的: Tue Jul 20 2021 14:59:43 GMT+0800 (中國標準時間) const year=date.getFullYear() // 獲取當前年份,值是這樣的: 2021 let month=date.getMonth()+1 // 獲取當前月份,值是這樣的: 6 getMonth()方法返回值是0-11,也就是1月份到12月份,所以要加上1,才是當前月份 if(month>=1 && month<=9){ // 如果是1月到9月就要在前面補上一個0 比如:02、07 月份這樣表示 month='0'+month } const nowDate=year.toString()+month.toString() // 轉換成字串拼接,最終得到年和月,比如此時的時間是2021年7月20號,所以nowDate的值是:202107 // 獲取時間選擇器的月份資訊 const timeyear=time.getFullYear() // 獲取時間選擇器的年份(有很多) let timemonth=time.getMonth()+1 // 與上面同理 if(timemonth>=1 && timemonth<=9){ timemonth='0'+timemonth } const elTimeData=timeyear.toString()+timemonth.toString() // 返回,時間選擇器的日期月份大於當前日期的月份,又因為disabledDate函式是控制月份禁用不可選 // 所以,最終就是:時間選擇器的月份大於當前的月份,就都禁用掉,所以就實現了最終效果: // 大於等於當前月份都不可選 return elTimeData<nowDate || elTimeData>nowDate// 這裡雖然是字串,但是弱型別語言js會做一個轉換,是可以比較大小的如: '202107' > '202008' } }, }
效果:
2.接下來改為根據月份動態控制日期的選中和禁用
<el-form-item label="月份" prop="month"> <el-date-picker v-model="form.month" type="month" placeholder="選擇月" value-format="yyyy-MM" :clearable="false"> </el-date-picker> </el-form-item>
<el-form-item label="開始日期" prop="enableStartTime" v-show="this.operationType!=='update'"> <el-date-picker v-model="form.enableStartTime" :picker-options="setMonthDisabled" type="date" placeholder="選擇日期" value-format="yyyy-MM-dd" :clearable="false"> </el-date-picker> </el-form-item>