1. 程式人生 > 其它 >根據動態月份限制日期只能選擇選中月的日期,其他月日期禁用

根據動態月份限制日期只能選擇選中月的日期,其他月日期禁用

參考文件連結: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>