代码改变世界

Element用两个type="date"的DatePicker实现类似type="daterange"的功能

2020-06-30 11:27  法子  阅读(1683)  评论(0编辑  收藏  举报

GitHub地址:https://github.com/liuyongfa/DatePickerRange.git

Element当type="daterange"的时候,选择器是第一次点选开始时间,第二次点选结束时间,而不是第一个选择器是开始,第二个选择器是结束。第一次用很容易去在第一个时间选择器里试点一下,然后再去在这第一个里选开始时间,结果就选择了一个时间范围。其实知道了使用方法之后还好。但是很多人用户表示莫名其妙不会用。

然后可以用两个type="date"的DatePicker实现类似type="daterange"的功能。第一个点几次都是开始,第二个点几次都是结束。开始时间里超过结束时间的不能选,结束时间里比开始时间还古老不能选。

使用:

<template>
    <DatePickerRange :values="array" :inputWidth="150"/>
</template>

<script>
import DatePickerRange from '@/components/DatePickerRange.vue'
export default {
    components: {
        DatePickerRange
    },
    data() {
        return {
            array:[]
        }
    }
}
</script>

代码:

<template>
  <div style="display: inline-block">
    <el-date-picker
      :style="{width: inputWidth + 'px'}"
      v-model="values[0]"
      align="right"
      type="date"
      placeholder="选择日期1"
      value-format="yyyy-MM-dd"
      :picker-options="pickerOptions1"
    ></el-date-picker>
    <span style="padding: 0 3px; color: #999999">-</span>
    <el-date-picker
      :style="{width: inputWidth + 'px'}"
      v-model="values[1]"
      align="right"
      type="date"
      placeholder="选择日期2"
      value-format="yyyy-MM-dd"
      :picker-options="pickerOptions2"
    ></el-date-picker>
  </div>
</template>

<script>
export default {
  props: {
    values: {
      type: Array,
      default: []
    },
    inputWidth: {
      type: Number,
      default: 200
    }
  },
  data() {
    return {
      gmtString: " GMT+0800",
      pickerOptions1: {
        disabledDate: date => {
          // 因为value-format= "yyyy-MM-dd",要和date比较就要转换,转换之后是UTC时间,而date是本地时区的时间
          // 如果没有设置alue-format= "yyyy-MM-dd",则可以直接比较:return this.values[1] ? date > this.values[1]: false;
          return this.values[1]
            ? date > new Date(this.values[1] + this.gmtString)
            : false;
        }
      },
      pickerOptions2: {
        disabledDate: date => {
          return this.values[0]
            ? date < new Date(this.values[0] + this.gmtString)
            : false;
        }
      }
    };
  },
  created() {
    let gmt = new Date().getTimezoneOffset() / 60;
    this.gmtString = gmt <= 0 ? " GMT+" + -gmt : " GMT-" + gmt;
  },
};
</script>