#el-date-picker限制只能选择本月

578 阅读1分钟

遇到一个需求:选择开始时间后 结束时间要不能跨越开始日期的月份,而且结束时间要大于开始时间,可选择当天。 直接上代码:

<div class="date-div">
            <div>
              <el-date-picker
                v-model="form.startDate"
                style="width: 180px"
                type="date"
                placeholder="选择日期"
                value-format="yyyy-MM-dd"
                @change="changeTime"
              >
              </el-date-picker>
            </div>
            <span>至</span>
            <div>
              <el-date-picker
                v-model="form.endDate"
                :disabled="!form.startDate"
                style="width: 180px"
                type="date"
                placeholder="选择日期"
                value-format="yyyy-MM-dd"
                :picker-options="pickerOptions"
              >
              </el-date-picker>
            </div>
          </div>

我们都知道可以使用picker-options来限制选择日期的范围,我们这里也是采用这个方式,下面是我的部分data数据:

data() {
        return {
         form: {
           deptCode: '',
           keyword: '',
           startDate: '',
           endDate: '',
         },
         pickerOptions: this.disabledDate(),
         month: null,
         year: null,
         day: null,
       },
     }

这里注意一下disabledDate的参数是当前时间,显然我们需要传参(开始时间)进去限制结束时间,那么我们在methods里定义一个函数来实现:

disabledDate() {
      let that = this;
      //disabledDate 文档上:设置禁用状态,参数为当前日期,要求返回 Boolean
      return {
        disabledDate(date) {
          if (that.form.startDate) {
            return (
              date.getTime() <
                new Date(new Date(that.form.startDate) - 24 * 60 * 60 * 1000).getTime() ||
              date.getTime() >
                new Date(
                  that.year,
                  that.month - 1,
                  new Date(that.year, that.month, 0).getDate(),
                ).getTime()
            );
          }
        },
      };
    },

大家可能对我的参数 year,month有疑问,其实就是开始时间:例如2021-10-21对应 year:2021,month:10,在开始时间change函数里去拿到。

change函数:

changeTime(val) {
      console.log(val);
      if (val) {
        this.month = val.split('-')[1];
        this.year = val.split('-')[0];
        // this.day = val.split('-')[2];
      } else {
        this.disabledDate();
        this.form.endDate = null;
      }
    },

b8ae9ee785a145a18ddf4fffaaac7ccf.png

结果:

ea1fccbc105f4577a8eb257aa3475bf4.png 我这个方法只是针对我的需求,其他需求修改disabledDate即可,我觉得还有更优的方法,请大佬指出!