两个日期选择器的联动

3 篇文章 0 订阅
让两个独立的日期选择器产生联动:(我这里用的是elmentUI的 DatePicker日期选择器
效果展示:

 

 方案1:
<el-col :span="12">
    <el-form-item label="客服单结单时间">
        <el-date-picker v-model="form.woCompletionTimeStart" placeholder="开始时间" align="right" type="date"
                :picker-options="startPickerOptions" style="float: left; width: 181.5px;">
        </el-date-picker>
        <div class="timeLine"></div>
        <el-date-picker v-model="form.woCompletionTimeEnd" placeholder="结束时间" align="right" type="date"
                :picker-options="endPickerOptions" style=" float: right;width: 181.5px;">
        </el-date-picker>
    </el-form-item>
</el-col>
computed: {
    startPickerOptions() {
      const self = this
      return {
        disabledDate(time) {
          if (self.form.woCompletionTimeEnd) {
            return time.getTime() > new Date(self.form.woCompletionTimeEnd).getTime()
            // new Date(self.form.woCompletionTimeEnd).getTime() 结束时间
            // Date.now() - 8.64e7 // 当前时间的前一天
            // time.getTime()  // 任意时间
          }
        }
      }
    },
    endPickerOptions() {
      const self = this
      return {
        disabledDate(time) {
          if (self.form.woCompletionTimeStart) { // 如果开始时间不为空,则结束时间大于开始时间
            return new Date(self.form.woCompletionTimeStart).getTime() > time.getTime()
          }
        }
      }
    }
  },
方案2:两个日期选择器的联动-简书
<el-form-item label="开始日期:">
  <el-date-picker
     v-model="form.startDate"
     type="date"
     placeholder="选择日期"
     style="width: 100%"
     value-format="yyyy-MM-dd"
     :picker-options="startPickerOptions"
   />
</el-form-item>
<el-form-item label="结束日期:">
  <el-date-picker
    v-model="form.endDate"
    type="date"
    placeholder="选择日期"
    style="width: 100%"
    value-format="yyyy-MM-dd"
    :picker-options="endPickerOptions"
  />
</el-form-item>
  computed: {
    startPickerOptions() {
      const self = this
      return {
        disabledDate(time) {
          if (self.form.endDate) { // 如果结束时间不为空,则小于结束时间
            return new Date(self.form.endDate).getTime() < time.getTime() || time.getTime() < Date.now() - 8.64e7
          } else {
            return time.getTime() < Date.now() - 8.64e7 // 开始时间不选时,结束时间最大值大于等于当天
          }
        }
      }
    },
    endPickerOptions() {
      const self = this
      return {
        disabledDate(time) {
          if (self.form.startDate) { // 如果开始时间不为空,则结束时间大于开始时间
            return new Date(self.form.startDate).getTime() - 8.64e7 > time.getTime()
          } else {
            return time.getTime() < Date.now() - 8.64e7// 开始时间不选时,结束时间最大值大于等于当天
          }
        }
      }
    }
  }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Js双日历控件,在一个网页上同时显示两个日期选择器,写成了封装类,方便使用者调用。同时美化的相当不错。   包括了以下函数:   1、2012——2020年节假日信息(包括节假日前1~3天/后1~3天)   2、格式化数字,不足两位前面补0   3、将日期对象/日期字会串格式化为指定日期字符串   4、将日期字符串格式化为数字   5、获取目标元素针对于文档的位置   6、元素选择器   7、查找元素位置   8、判断目标元素是否包含指定的className      关于一些日历调用的参数说明:Calendar({    id: "#J_date_1", //触发显示日历元素ID    isPopup: !0, //弹出式日历    isPrevBtn: !0, //显示上月按钮    isNextBtn: !0, //显示下月按钮    isCloseBtn: !0, //显示关闭按钮    isHoliday: !0, //节假日特殊显示    isHolidayTips: !0, //显示节假日1~3天/后1~3天信息    isDateInfo: !0, //显示日期信息    isMessage: !0, //有日历提示信息    isCalStart: !0, //标记为开始时间    dateInfoClass: "date-info-start", //开始时间icon样式    range: {mindate: "2011-09-01", maxdate: "2020-12-31"},//限制范围(当天——2020-12-31)    count: 2, //日历个数    monthStep: 1, //切换上下月日历步长    onSelectDate: fnSelectDate, //选择日期回调方法    onClose: fnClose //关闭日历回调方法
你可以通过监听第一个选择框的变化事件,然后根据选中的值动态更新第二个选择框的选项。具体实现步骤如下: 1. 在第一个选择框中设置一个 `v-model` 变量,用来存储选中的值。 2. 声明一个数组,用来存储第二个选择框的选项。 3. 监听第一个选择框的变化事件,在事件处理函数中根据选中的值动态更新第二个选择框的选项。 4. 在第二个选择框中设置一个 `v-model` 变量,用来存储选中的值。 下面是一个示例代码: ```html <template> <div> <el-select v-model="selectedValue1" @change="handleChange"> <el-option v-for="item in options1" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> <el-select v-model="selectedValue2"> <el-option v-for="item in options2" :key="item.value" :label="item.label" :value="item.value"></el-option> </el-select> </div> </template> <script> export default { data() { return { selectedValue1: '', selectedValue2: '', options1: [ { value: 'option1', label: '选项1' }, { value: 'option2', label: '选项2' }, { value: 'option3', label: '选项3' } ], options2: [] } }, methods: { handleChange() { if (this.selectedValue1 === 'option1') { this.options2 = [ { value: 'suboption1', label: '子选项1' }, { value: 'suboption2', label: '子选项2' } ] } else if (this.selectedValue1 === 'option2') { this.options2 = [ { value: 'suboption3', label: '子选项3' }, { value: 'suboption4', label: '子选项4' } ] } else { this.options2 = [] } this.selectedValue2 = '' } } } </script> ``` 在上面的代码中,我们通过 `handleChange` 方法来处理第一个选择框的变化事件。根据选中的值,我们动态更新了第二个选择框的选项。同时,我们也将第二个选择框的选中值重置为空。这样可以避免在选项更新后,第二个选择框的选中值不符合要求的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值