Skip to content

时间选择器 TimePicker ​

可以选择时间的picker

基础用法 ​

使用 b-time-picker 标签,通过 disabledHours disabledMinutes 和 disabledSeconds限制可选时间范围。

提供了两种交互方式:默认情况下通过鼠标滚轮进行选择,打开arrow-control属性则通过界面上的箭头进行选择。

<template>
  <div flex>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker
        v-model="value1"
        :disabled-hours="disabledHours"
        :disabled-minutes="disabledMinutes"
        :disabled-seconds="disabledSeconds"
        placeholder="任意时间点"
      ></b-time-picker>
    </div>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker
        v-model="value2"
        arrow-control
        :disabled-hours="disabledHours"
        :disabled-minutes="disabledMinutes"
        :disabled-seconds="disabledSeconds"
        placeholder="任意时间点"
      ></b-time-picker>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value1 = ref(new Date(2016, 9, 10, 18, 40))
const value2 = ref(new Date(2016, 9, 10, 18, 40))

const makeRange = (start, end) => {
  const result = []
  for (let i = start; i <= end; i++) {
    result.push(i)
  }
  return result
}

function disabledHours() {
  return makeRange(0, 16).concat(makeRange(19, 23))
}

function disabledMinutes(hour) {
  if (hour === 17) {
    return makeRange(0, 29)
  }
  if (hour === 18) {
    return makeRange(31, 59)
  }
}

function disabledSeconds(hour, minute) {
  if (hour === 18 && minute === 30) {
    return makeRange(1, 59)
  }
}
</script>

任意时间范围 ​

添加is-range属性即可选择时间范围,同样支持arrow-control属性。

至
   
至
<template>
  <div flex>
    <b-time-picker
      v-model="value1"
      style="width: 340px"
      is-range
      range-separator="至"
      start-placeholder="开始时间"
      end-placeholder="结束时间"
      placeholder="选择时间范围"
    ></b-time-picker>
    &nbsp; &nbsp;
    <b-time-picker
      v-model="value2"
      style="width: 340px"
      is-range
      arrow-control
      range-separator="至"
      start-placeholder="开始时间"
      end-placeholder="结束时间"
      placeholder="选择时间范围"
    ></b-time-picker>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value1 = ref([new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)])
const value2 = ref([new Date(2016, 9, 10, 8, 40), new Date(2016, 9, 10, 9, 40)])
</script>

禁用状态和禁用时间 ​

使用 b-time-picker 标签,通过 disabledHours disabledMinutes 和 disabledSeconds限制可选时间范围。

<template>
  <div flex>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker
        v-model="value1"
        :disabled-hours="disabledHours"
        :disabled-minutes="disabledMinutes"
        :disabled-seconds="disabledSeconds"
        placeholder="任意时间点"
      ></b-time-picker>
    </div>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker disabled placeholder="禁用状态"></b-time-picker>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value1 = ref(new Date(2016, 9, 10, 18, 40))

const makeRange = (start, end) => {
  const result = []
  for (let i = start; i <= end; i++) {
    result.push(i)
  }
  return result
}

function disabledHours() {
  return makeRange(0, 16).concat(makeRange(19, 23))
}

function disabledMinutes(hour) {
  if (hour === 17) {
    return makeRange(0, 29)
  }
  if (hour === 18) {
    return makeRange(31, 59)
  }
}

function disabledSeconds(hour, minute) {
  if (hour === 18 && minute === 30) {
    return makeRange(1, 59)
  }
}
</script>

时间格式 ​

设置属性 format 可以改变时间的显示格式

注意, format 只是改变显示的格式,并非改变 value 值

~
<template>
  <div flex>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker
        v-model="value1"
        format="HH点mm分ss秒"
        placeholder="任意时间点"
      ></b-time-picker>
    </div>
    <div style="width: 220px; margin-right: 20px">
      <b-time-picker
        v-model="value2"
        is-range
        arrow-control
        format="HH’mm’ss"
        range-separator="~"
        start-placeholder="开始时间"
        end-placeholder="结束时间"
        placeholder="选择时间范围"
      >
        >
      </b-time-picker>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value1 = ref(new Date(2023, 9, 10, 18, 40))
const value2 = ref([new Date(2023, 4, 270, 18, 40), new Date(2023, 4, 30, 11, 40)])
</script>

不同大小 ​

可以设置不同的大小

<template>
  <div flex>
    <div style="width: 240px; margin-right: 20px">
      <b-time-picker v-model="value1" size="large"></b-time-picker>
    </div>
    <div style="width: 240px; margin-right: 20px">
      <b-time-picker v-model="value1"></b-time-picker>
    </div>
    <div style="width: 240px; margin-right: 20px">
      <b-time-picker v-model="value1" size="small"></b-time-picker>
    </div>
    <div style="width: 240px; margin-right: 20px">
      <b-time-picker v-model="value1" size="mini"></b-time-picker>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue'

const value1 = ref(new Date(2016, 9, 10, 18, 40))
</script>

Props ​

参数说明类型可选值默认值
value / v-model绑定值date——
readonly完全只读boolean—false
disabled禁用boolean—false
editable文本框可输入boolean—true
clearable是否显示清除按钮boolean—true
size输入框尺寸stringmedium / small / mini—
placeholder非范围选择时的占位内容string——
start-placeholder范围选择时开始日期的占位内容string——
end-placeholder范围选择时开始日期的占位内容string——
is-range是否为时间范围选择boolean—false
arrow-control是否使用箭头进行时间选择boolean—false
align对齐方式stringleft / center / rightleft
popper-classTimePicker 下拉框的类名string——
range-separator选择范围时的分隔符string-'-'
format显示在输入框中的格式string-HH:mm:ss
default-value可选,选择器打开时默认显示的时间Date(TimePicker) / string(TimeSelect)可被new Date()解析(TimePicker) / 可选值(TimeSelect)—
name原生属性string——
prefix-icon自定义头部图标的类名string—time-circle
clear-icon自定义清空图标的类名string—close-circle-fill
disabledHours禁止选择部分小时选项function—-
disabledMinutes禁止选择部分分钟选项function(selectedHour)—-
disabledSeconds禁止选择部分秒选项function(selectedHour, selectedMinute)—-

Events ​

事件名说明参数
change用户确认选定的值时触发组件绑定值
blur当 input 失去焦点时触发组件实例
focus当 input 获得焦点时触发组件实例

Methods ​

方法名说明参数
focus使 input 获取焦点-