zoukankan      html  css  js  c++  java
  • vue结合element 自定义选择时间范围 比如一个月范围

    最近项目里要做一个自定义选择时间范围的需求,说下需求,1.开始时间只能选择当天之前两个月的区间,2.结束时间只能是在开始时间的基础上的一个月跨度,且不能超过今天以及未来时间

    看了element 的时间选择器里边的demo,有个选择时间区间的控件,像这样的

     但他选择任何一个的时候,都会弹出两个时间框,放在项目中,无奈都嫌它太丑,只能还用单个的那种,像这样

    两个控件是单独分开的,

    话不多说 上代码

     <span class="zhiTitle">最近发现时间</span>
        <span class="timeChange">
          <span class="timeChangeSpan">
            <el-date-picker
              class="zhiTime"
              type="date"
              v-model="form.lastDiscoveryStartTime"
              value-format="yyyy-MM-dd"
              :picker-options="pickerOptionsStart"
              @change="timeOptions"
            ></el-date-picker>
          </span>
          <span class="zhiCenter">—</span>
          <span class="timeChangeSpan">
            <el-date-picker
              class="zhiTime"
              type="date"
              v-model="form.lastDiscoveryEndTime"
              :picker-options="pickerOptionsEnd"
              value-format="yyyy-MM-dd"
              @focus="timeOptionsEnd"
              ref="lastDiscoveryEndTime"
            ></el-date-picker>
          </span>
        </span>
    
    
     data() {
        return {
          pickerOptionsStart: {
            disabledDate(time) {
              return time.getTime() > Date.now() - 8.64e7 || time.getTime() < Date.now() - 60 * 24 * 60 * 60 * 1000
            }
          },
          pickerOptionsEnd: {},
        }
    }
    
    
     methods: {
        // 当开始时间改变时 就让结束时间清空
        timeOptions() {
          this.form.lastDiscoveryEndTime = ''
        },
        timeOptionsEnd() {
        // 若不填开始时间的值,先选择结束时间就提示用户填写开始时间
          if (this.form.lastDiscoveryStartTime == '' || this.form.lastDiscoveryStartTime == null ) {
        // 不让弹出结束时间框
            this.$refs.lastDiscoveryEndTime.pickerVisible = false
            return this.$message.warning('请填写开始时间')
          } else {
            // 若开始时间填写 结束时间的弹出选择时间框正常显示
            this.$refs.lastDiscoveryEndTime.pickerVisible = true
          }
          let that = this
            // 结束时间是在开始时间的基础上去建立可选范围
          this.pickerOptionsEnd = {
            disabledDate(time) {
              let dataLast = new Date(that.form.lastDiscoveryStartTime).getTime()
              return (
                // 不超过一个月且不能选当天且可以选和开始时间一样的日期
                time.getTime() > dataLast + 31 * 24 * 60 * 60 * 1000 || time.getTime() < dataLast - 8.64e7 || time.getTime() > Date.now() - 8.64e7
              )
            }
          }
        }
    }        

    使用这个时间框有些问题

    选择完时间之后,再清除数据时,他的值就不是空,而是null,所以要注意

    :picker-options="pickerOptionsStart"    这个方法里边的禁用的  time.getTime() 其实就是 选择面板里边的显示的所有时间,时间戳减去8.64e7 其实和24*60*60*100一样,都是一天的时间

    想要什么样的时间范围按这种方法自行决定就行

  • 相关阅读:
    微服务基础——厉害了!API网关
    11.11 大促背后的秘密——智能合图
    那些我们对2019技术世界趋势的预测都说准了吗?
    DevOps云翼日志服务实践
    技术沙龙|原来落地AI应用是这么回事儿!
    直击JDD | 京东开启技术服务元年:携手合作伙伴,共创产业未来
    直击JDD | 徐雷:智能化零售,以技术为驱动力的突破路径
    直击JDD | 陈生强:京东数科的底层是数字化操作系统
    干货 | Spark Streaming 和 Flink 详细对比
    持续集成与自动化部署
  • 原文地址:https://www.cnblogs.com/yanyanliu/p/12808250.html
Copyright © 2011-2022 走看看