如何动态 设置 iview DatePicker 控件的 禁用日期(option)

在公司开发的过程中遇到的问题,我们采用了iview的Vue框架。
现有一个需求:用户在初始时页面后,DatePicker 的可选时间范围不作限制,用户可选择任意一天。当用户选择了某一天(planTime)后,并进行内容查询后,DatePicker的时间范围限制为 planTime 所在的这个月。
一开始我的解决方法:设置两个 DatePicker,v-model都为planTime。当用户选择了某一天并进行查询后,通过判断 planTime 不为空显示”一开始就被限制了时间范围“的DatePicker控件。但是,因为我一开始不知道用户会选择哪一天,所以,此时我只能限制用户选择当前这个月。
贴代码:

<Form-item label="计划保养时间">
    <div v-if="planTime == ''">
      <Date-picker type="date" placeholder="请选择日期" v-model="planTime" :options="optionsOfTime" key="one"
                   format="yyyy-MM-dd"></Date-picker>
    </div>
    <div v-else>
      <Date-picker type="date" placeholder="请选择日期" v-model="planTime" key="two"
                   format="yyyy-MM-dd"></Date-picker>
    </div>
</Form-item>
data() {
      return {
        optionsOfTime: {  // 约束计划保养时间
          disabledDate(date) {
            const myDate = new Date(),
              day = myDate.getDate()
            // 当一次制定多个保养计划时,限制只能选择这个月
            return date && Date.now() + (getNumOfMouthDays() - day) * 86400000 < date.valueOf() || date.valueOf() < Date.now() - day * 86400000;
          }
        },
        planTime: ''
        }
   }
/**
 * 获取一个月有多少天
 * @returns {number}
 */
export const getNumOfMouthDays = () => {
  var curDate = new Date();
  /* 获取当前月份 */
  var curMonth = curDate.getMonth();
  /* 生成实际的月份: 由于curMonth会比实际月份小1, 故需加1 */
  curDate.setMonth(curMonth + 1);
  /* 由curMouth 加了1,所以这个是 curDate 是下个月的,setDate(0)之后就是这个月的最后一天 */
  // setDate()方法用來設定日期物件中本地時間的日,也就是每個月中的幾號,傳入參數是一個1~31的整數。
  // 若是傳入的值超出當月份的正常範圍,setDate()方法也會依據超出的數值進行計算,
  // 譬如setDate(0)會讓日期變成前一個月的最後一天,setDate(-1)會讓日期變成前一個月的倒數第二天。
  // 若當月有31天,那setDate(32)會讓日期變成下個月的第一天。
  curDate.setDate(0);
  /* 返回当月的天数 */
   return curDate.getDate();
}

图片描述

阅读 12.1k
3 个回答

1.首先不需要这么复杂
2.在用户没选择的时候,disableDate返回false
3.当用户选择了之后,非当前月的返回true

请问可以设置到具体的分钟不可以选吗 定时任务: 大于现在时间的10分钟后开始 24小时内 。我是想写一个带时间的日期选择的 不知道怎么弄?

刚刚看到关于时间的设置 我先去看看....

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题