基于Vant实现日期时间选择器(选到秒)

实现基于Vant实现日期时间选择器(选到秒)组件。

dateTimePicker.vue

<template>
  <div class="container">
    <van-calendar v-model="showPicker" color="#357cea"
                  :default-date="defaultDate"
                  :min-date="minDate" class="calendar"
                  :max-date="maxDate"
                  :show-confirm="true"
                  @confirm="onConfirmDate"
                  @cancel="showPicker = false"
    >
      <template v-if="type !== 'date'" slot="title">
        <div class="calendar-title" @click="timerPicker = true">
          {{ selectTimeToSeconds }}
        </div>
      </template>
    </van-calendar>
    <van-overlay class="time-picker" :show="timerPicker" @click="timerPicker = false">
      <van-picker show-toolbar title="选择时间" :columns="timeColumns" @confirm="confirmTime" />
    </van-overlay>
  </div>
</template>

<script>
import moment from 'moment';
import {
  Picker, Calendar, Overlay,
} from 'vant';

export default {
  name: 'DateTimePicker',
  components: {
    [Picker.name]: Picker,
    [Calendar.name]: Calendar,
    [Overlay.name]: Overlay,
  },
  props: {
    // 类型 选择到秒还是只到日期
    type: {
      type: String,
      default() {
        return 'seconds';
      },
    },
    showTimePicker: {
      type: Boolean,
      default() {
        return false;
      },
    },
    minDate: {
      type: Date,
      default() {
        return new Date(2010, 0, 1);
      },
    },
    defaultDate: {
      type: Date,
      default() {
        return new Date();
      },
    },
    maxDate: {
      type: Date,
      default() {
        return new Date(2050, 0, 1);
      },
    },
  },
  data() {
    return {
      showPicker: this.showTimePicker,
      timerPicker: false,
      selectTimeToSeconds: moment().format('HH:mm:ss'),
      timeColumns: [
        {
          values: this.createTimeList(23),
          defaultIndex: Number(moment().format('HH')),
        },
        {
          values: this.createTimeList(59),
          defaultIndex: Number(moment().format('mm')),
        },
        {
          values: this.createTimeList(59),
          defaultIndex: Number(moment().format('ss')),
        },
      ],
    };
  },
  watch: {
    showTimePicker: {
      handler() {
        this.showPicker = true;
      },
      immidiate: true,
    },
  },
  methods: {
    createTimeList(N) {
      const foo = [];
      for (let i = 0; i <= N; i += 1) {
        if (i < 10) {
          foo.push(`0${i}`);
        } else {
          foo.push(i);
        }
      }
      return foo;
    },
    // 发现时间
    onConfirmDate(date) {
      let selectTime = '';
      if (this.type === 'date') {
        selectTime = `${moment(date).format('YYYY-MM-DD')
        } `;
      } else {
        selectTime = `${moment(date).format('YYYY-MM-DD')
        } ${this.selectTimeToSeconds}`;
      }
      this.$emit('onConfirmDate', selectTime);
      this.showPicker = false;
    },
    confirmTime(value) {
      this.selectTimeToSeconds = `${value[0]}:${value[1]}:${value[2]}`;
      this.timerPicker = false;
    },
  },
};
</script>

<style scoped lang="less">
.container {
   .time-picker {
  z-index: 2100 !important;
   display: flex;
    align-items: center;
    /deep/ .van-picker {
      width:100%;
    }
}
}

</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于vant组件库封装的时间选择器选到分钟的代码实例: ```vue <template> <van-popup v-model="showPicker" position="bottom"> <van-datetime-picker v-model="currentDate" type="datetime" :columns-order="columnsOrder" :formatter="formatter" :min-date="minDate" :max-date="maxDate" @confirm="onConfirm" @cancel="onCancel" /> </van-popup> </template> <script> export default { data() { return { showPicker: false, currentDate: new Date(), columnsOrder: ['year', 'month', 'day', 'hour', 'minute'], minDate: new Date(2000, 0, 1), maxDate: new Date(2030, 11, 31), }; }, methods: { formatter(type, value) { if (type === 'year') { return `${value}年`; } else if (type === 'month') { return `${value}月`; } else if (type === 'day') { return `${value}日`; } else if (type === 'hour') { return `${value}时`; } else if (type === 'minute') { return `${value}分`; } return value; }, onConfirm(val) { this.showPicker = false; console.log(val); }, onCancel() { this.showPicker = false; }, showTimePicker() { this.showPicker = true; }, }, }; </script> ``` 在这个代码实例中,我们使用了vant组件库中的Popup弹出层组件和DatetimePicker时间选择器组件。我们将DatetimePicker的type属性设置为datetime,同时将columnsOrder属性设置为['year', 'month', 'day', 'hour', 'minute'],这样就可以选择到分钟了。我们还通过formatter属性对每个时间列进行了格式化,使其显示为中文的年月日时分。最后,我们在onConfirm方法中打印出了选择的时间值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值