两个日期选择器的联动

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 //关闭日历回调方法
可以使用Vue3中的Composition API来实现一个有联动日期选择器组。 首先,需要引入日期选择器组件: ```html <template> <div> <label>开始日期:</label> <DatePicker v-model="startDate" :disabled-date="disabledStartDate" @change="handleStartDateChange" /> <label>结束日期:</label> <DatePicker v-model="endDate" :disabled-date="disabledEndDate" @change="handleEndDateChange" /> </div> </template> <script> import { ref, watch } from 'vue'; import { DatePicker } from 'element-plus'; export default { components: { DatePicker, }, setup() { const startDate = ref(null); const endDate = ref(null); // 禁止选择开始日期之前的日期 const disabledStartDate = time => { if (endDate.value) { return time.getTime() > endDate.value.getTime(); } }; // 禁止选择结束日期之后的日期 const disabledEndDate = time => { if (startDate.value) { return time.getTime() < startDate.value.getTime(); } }; // 监听开始日期的变化 const handleStartDateChange = val => { endDate.value = null; }; // 监听结束日期的变化 const handleEndDateChange = val => { startDate.value = null; }; // 监听开始日期和结束日期的变化 watch([startDate, endDate], ([newStartDate, newEndDate]) => { if (newStartDate && newEndDate && newStartDate.getTime() > newEndDate.getTime()) { [startDate.value, endDate.value] = [endDate.value, startDate.value]; } }); return { startDate, endDate, disabledStartDate, disabledEndDate, handleStartDateChange, handleEndDateChange, }; }, }; </script> ``` 在这个组件中,我们引入了Element Plus中的DatePicker组件,并使用了Vue3中的Composition API来实现联动效果。 具体来说,我们通过ref函数创建了startDate和endDate两个响应式变量,并在模板中使用v-model指令来绑定它们。 我们还分别实现了disabledStartDate和disabledEndDate两个方法来禁止选择不合法的日期。这里需要注意的是,当选择完开始日期之后,要将结束日期重置为null,以避免选择一个无效的结束日期。 最后,我们使用watch函数来监听startDate和endDate的变化,并在它们发生变化时,交换它们的值,以确保开始日期早于结束日期
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值