Skip to content

TimePicker 时间选择器

时间选择器组件。

何时使用

  • 当用户需要选择一个时间点时
  • 当用户需要选择一个时间范围时
  • 当需要精确控制时间选择时

基础用法

最简单的时间选择器用法。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <YcTimePicker v-model="time" placeholder="请选择时间" />
    <div>选择的时间: {{ time }}</div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time = ref('');
</script>

时间范围选择

通过 type="time-range" 启用时间范围选择。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>单个时间</h4>
      <YcTimePicker v-model="singleTime" placeholder="请选择时间" />
      <div>选择的时间: {{ singleTime }}</div>
    </div>
    
    <div>
      <h4>时间范围</h4>
      <YcTimePicker 
        v-model="rangeTime" 
        type="time-range"
        placeholder="['开始时间', '结束时间']"
      />
      <div>开始时间: {{ rangeTime?.[0] }}</div>
      <div>结束时间: {{ rangeTime?.[1] }}</div>
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const singleTime = ref('');
const rangeTime = ref([]);
</script>

时间格式

通过 format 属性设置时间格式。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>默认格式 (HH:mm:ss)</h4>
      <YcTimePicker v-model="time1" placeholder="默认格式" />
    </div>
    
    <div>
      <h4>小时分钟格式 (HH:mm)</h4>
      <YcTimePicker v-model="time2" format="HH:mm" placeholder="小时分钟格式" />
    </div>
    
    <div>
      <h4>12小时制格式 (hh:mm:ss A)</h4>
      <YcTimePicker v-model="time3" format="hh:mm:ss A" placeholder="12小时制格式" />
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time1 = ref('');
const time2 = ref('');
const time3 = ref('');
</script>

时间步长

通过 step 属性设置时间步长。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>默认步长</h4>
      <YcTimePicker v-model="time1" placeholder="默认步长" />
    </div>
    
    <div>
      <h4>30分钟步长</h4>
      <YcTimePicker 
        v-model="time2" 
        :step="{ minute: 30 }"
        placeholder="30分钟步长"
      />
    </div>
    
    <div>
      <h4>自定义步长</h4>
      <YcTimePicker 
        v-model="time3" 
        :step="{ hour: 2, minute: 15, second: 30 }"
        placeholder="自定义步长"
      />
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time1 = ref('');
const time2 = ref('');
const time3 = ref('');
</script>

禁用时间

通过 disabledHoursdisabledMinutesdisabledSeconds 属性禁用特定时间。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>禁用特定小时</h4>
      <YcTimePicker 
        v-model="time1" 
        :disabled-hours="() => [0, 1, 2, 3, 4, 5, 6, 22, 23]"
        placeholder="禁用凌晨和深夜时间"
      />
    </div>
    
    <div>
      <h4>禁用特定分钟</h4>
      <YcTimePicker 
        v-model="time2" 
        :disabled-minutes="() => [0, 15, 30, 45]"
        placeholder="禁用整点和刻钟"
      />
    </div>
    
    <div>
      <h4>禁用特定秒数</h4>
      <YcTimePicker 
        v-model="time3" 
        :disabled-seconds="() => [0, 30]"
        placeholder="禁用整秒和半秒"
      />
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time1 = ref('');
const time2 = ref('');
const time3 = ref('');
</script>

尺寸设置

通过 size 属性设置时间选择器尺寸。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>小尺寸</h4>
      <YcTimePicker v-model="time1" size="small" placeholder="小尺寸" />
    </div>
    
    <div>
      <h4>中等尺寸</h4>
      <YcTimePicker v-model="time2" size="medium" placeholder="中等尺寸" />
    </div>
    
    <div>
      <h4>大尺寸</h4>
      <YcTimePicker v-model="time3" size="large" placeholder="大尺寸" />
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time1 = ref('');
const time2 = ref('');
const time3 = ref('');
</script>

清除功能

通过 allowClear 属性启用清除功能。

vue
<template>
  <YcSpace direction="vertical" size="large">
    <div>
      <h4>不可清除</h4>
      <YcTimePicker v-model="time1" placeholder="不可清除" />
    </div>
    
    <div>
      <h4>可清除</h4>
      <YcTimePicker 
        v-model="time2" 
        :allow-clear="true"
        placeholder="可清除"
        @clear="onClear"
      />
    </div>
  </YcSpace>
</template>

<script setup>
import { ref } from 'vue';

const time1 = ref('');
const time2 = ref('');

const onClear = () => {
  console.log('时间已清除');
};
</script>

完整示例

一个完整的时间选择器组件使用示例。

vue
<template>
  <div class="page">
    <h2>TimePicker 时间选择器示例</h2>
    
    <div class="section">
      <h3>基础用法</h3>
      <YcTimePicker v-model="basicTime" placeholder="请选择时间" />
      <div style="margin-top: 16px;">选择的时间: {{ basicTime }}</div>
    </div>
    
    <div class="section">
      <h3>时间范围选择</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>单个时间</h4>
          <YcTimePicker v-model="singleTime" placeholder="请选择时间" />
          <div>选择的时间: {{ singleTime }}</div>
        </div>
        
        <div>
          <h4>时间范围</h4>
          <YcTimePicker 
            v-model="rangeTime" 
            type="time-range"
            placeholder="['开始时间', '结束时间']"
          />
          <div>开始时间: {{ rangeTime?.[0] }}</div>
          <div>结束时间: {{ rangeTime?.[1] }}</div>
        </div>
      </YcSpace>
    </div>
    
    <div class="section">
      <h3>时间格式</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>默认格式 (HH:mm:ss)</h4>
          <YcTimePicker v-model="formatTime1" placeholder="默认格式" />
        </div>
        
        <div>
          <h4>小时分钟格式 (HH:mm)</h4>
          <YcTimePicker v-model="formatTime2" format="HH:mm" placeholder="小时分钟格式" />
        </div>
        
        <div>
          <h4>12小时制格式 (hh:mm:ss A)</h4>
          <YcTimePicker v-model="formatTime3" format="hh:mm:ss A" placeholder="12小时制格式" />
        </div>
      </YcSpace>
    </div>
    
    <div class="section">
      <h3>时间步长</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>默认步长</h4>
          <YcTimePicker v-model="stepTime1" placeholder="默认步长" />
        </div>
        
        <div>
          <h4>30分钟步长</h4>
          <YcTimePicker 
            v-model="stepTime2" 
            :step="{ minute: 30 }"
            placeholder="30分钟步长"
          />
        </div>
        
        <div>
          <h4>自定义步长</h4>
          <YcTimePicker 
            v-model="stepTime3" 
            :step="{ hour: 2, minute: 15, second: 30 }"
            placeholder="自定义步长"
          />
        </div>
      </YcSpace>
    </div>
    
    <div class="section">
      <h3>禁用时间</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>禁用特定小时</h4>
          <YcTimePicker 
            v-model="disabledTime1" 
            :disabled-hours="() => [0, 1, 2, 3, 4, 5, 6, 22, 23]"
            placeholder="禁用凌晨和深夜时间"
          />
        </div>
        
        <div>
          <h4>禁用特定分钟</h4>
          <YcTimePicker 
            v-model="disabledTime2" 
            :disabled-minutes="() => [0, 15, 30, 45]"
            placeholder="禁用整点和刻钟"
          />
        </div>
      </YcSpace>
    </div>
    
    <div class="section">
      <h3>尺寸设置</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>小尺寸</h4>
          <YcTimePicker v-model="sizeTime1" size="small" placeholder="小尺寸" />
        </div>
        
        <div>
          <h4>中等尺寸</h4>
          <YcTimePicker v-model="sizeTime2" size="medium" placeholder="中等尺寸" />
        </div>
        
        <div>
          <h4>大尺寸</h4>
          <YcTimePicker v-model="sizeTime3" size="large" placeholder="大尺寸" />
        </div>
      </YcSpace>
    </div>
    
    <div class="section">
      <h3>清除功能</h3>
      <YcSpace direction="vertical" size="large">
        <div>
          <h4>不可清除</h4>
          <YcTimePicker v-model="clearTime1" placeholder="不可清除" />
        </div>
        
        <div>
          <h4>可清除</h4>
          <YcTimePicker 
            v-model="clearTime2" 
            :allow-clear="true"
            placeholder="可清除"
            @clear="onClear"
          />
        </div>
      </YcSpace>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';

// 基础用法
const basicTime = ref('');

// 时间范围选择
const singleTime = ref('');
const rangeTime = ref([]);

// 时间格式
const formatTime1 = ref('');
const formatTime2 = ref('');
const formatTime3 = ref('');

// 时间步长
const stepTime1 = ref('');
const stepTime2 = ref('');
const stepTime3 = ref('');

// 禁用时间
const disabledTime1 = ref('');
const disabledTime2 = ref('');

// 尺寸设置
const sizeTime1 = ref('');
const sizeTime2 = ref('');
const sizeTime3 = ref('');

// 清除功能
const clearTime1 = ref('');
const clearTime2 = ref('');

// 方法
const onClear = () => {
  console.log('时间已清除');
};
</script>

<style scoped>
.page {
  padding: 24px;
}

.section {
  margin-bottom: 32px;
}

.section h3 {
  margin-bottom: 16px;
  color: #333;
  border-bottom: 1px solid #f0f0f0;
  padding-bottom: 8px;
}

.section h4 {
  margin-bottom: 12px;
  color: #666;
}
</style>

API

TimePicker Props

参数说明类型默认值
type时间选择器类型TimePickerType'time'
modelValue绑定值TimePickerValue-
defaultValue默认值TimePickerValue-
disabled是否禁用booleanfalse
allowClear是否允许清除booleanfalse
readonly是否只读booleanfalse
error是否错误状态booleanfalse
format时间格式string'HH:mm:ss'
placeholder占位符string | string[]-
size尺寸Size'medium'
step时间步长{ hour?: number; minute?: number; second?: number }-
disabledHours禁用的小时DisabledHours-
disabledMinutes禁用的分钟DisabledMinutes-
disabledSeconds禁用的秒数DisabledSeconds-
hideDisabledOptions是否隐藏禁用的选项booleanfalse
disableConfirm是否禁用确认booleanfalse
position弹出位置TimePickerPosition-
popupVisible是否显示弹出层boolean-
defaultPopupVisible默认是否显示弹出层booleanfalse
unmountOnClose关闭时是否卸载booleanfalse

Events

事件名说明回调参数
update:modelValue绑定值变化时触发(value: TimePickerValue)
update:popupVisible弹出层显示状态变化时触发(value: boolean)
change时间变化时触发(timeString, time)
select选择时间时触发(timeString, time)
clear清除时触发-
popup-visible-change弹出层显示状态变化时触发(value: boolean)

Slots

插槽名说明参数
prefix前缀图标-
suffix-icon后缀图标-
extra额外内容-

TimePickerType

类型说明
'time'单个时间选择
'time-range'时间范围选择

TimePickerPosition

类型说明
'top'顶部
'tl'左上
'tr'右上
'bottom'底部
'bl'左下
'br'右下

DisabledHours

类型说明
() => number[]返回禁用的小时数组

DisabledMinutes

类型说明
(selectedHour?: number) => number[]根据选中的小时返回禁用的分钟数组

DisabledSeconds

类型说明
(selectedHour?: number, selectedMinute?: number) => number[]根据选中的小时和分钟返回禁用的秒数数组

注意事项

  1. 时间范围选择时,placeholder 应该是一个数组
  2. 时间格式支持多种格式,如 HH:mm:sshh:mm:ss A
  3. 禁用时间功能可以精确控制可选时间范围
  4. 时间步长可以分别设置小时、分钟、秒的步长

样式定制

组件提供了多个样式类,可以通过 CSS 进行定制:

css
.yc-time-picker {
  /* 时间选择器容器 */
}

.yc-time-picker-disabled {
  /* 禁用状态 */
}

.yc-time-picker-error {
  /* 错误状态 */
}

.yc-time-picker-readonly {
  /* 只读状态 */
}

.yc-time-picker-panel {
  /* 时间选择面板 */
}

.yc-time-picker-cell {
  /* 时间单元格 */
}

.yc-time-picker-cell-disabled {
  /* 禁用的时间单元格 */
}

Released under the MIT License.