Raccourci clavier : Ctrl + K
Commencer

Sélecteur d'heure

Un cadran d'horloge en ligne, le pendant de VDatePicker pour les heures et les minutes. Sa valeur est toujours une chaîne HH:mm sur 24 heures, quelle que soit l'horloge affichée.

Utilisation

vue
<script setup lang="ts">
import { ref } from 'vue'
import { VTimePicker } from 'vectis-ui'

const time = ref<string | null>('09:30')
</script>

<template>
  <VTimePicker v-model="time" />
</template>

Exemples

Pas des minutes

minuteStep est l'intervalle auquel l'aiguille s'aligne et le pas des flèches du clavier, sur les minutes seules. Le cadran n'imprime que les minutes que le pas atteint.

vue
Every minute, the default
Quarter hours
<script setup lang="ts">
import { ref } from 'vue'
import { VTimePicker, VTypography } from 'vectis-ui'

const anyMinute = ref<string | null>('09:37')
const quarters = ref<string | null>('09:45')
</script>

<template>
  <div class="row">
    <div class="group">
      <VTypography variant="overline" tone="muted">Every minute, the default</VTypography>
      <VTimePicker v-model="anyMinute" />
    </div>

    <div class="group">
      <VTypography variant="overline" tone="muted">Quarter hours</VTypography>
      <VTimePicker v-model="quarters" :minute-step="15" />
    </div>
  </div>
</template>

<style scoped>
.row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--vectis-space-6);
}
.group {
  display: grid;
  gap: var(--vectis-space-2);
}
</style>

Ce que l’on peut choisir

min et max sont deux bornes inclusives écrites en chaînes canoniques HH:mm, et allowedHours et allowedMinutes acceptent chacune la liste des valeurs autorisées ou une règle répondant pour une valeur. Ce qu'elles écartent est absent du cadran, et une heure n'est fermée que lorsqu'il n'y reste plus rien.

vue
Between 09:30 and 17:00

Nine o'clock stays open, and it is its first thirty minutes that go

Quarter hours, on three hours

The face keeps only the five minute marks a rule leaves standing

<script setup lang="ts">
import { ref } from 'vue'
import { VTimePicker, VTypography } from 'vectis-ui'

const office = ref<string | null>('09:30')
const booking = ref<string | null>('14:15')
</script>

<template>
  <div class="row">
    <div class="group">
      <VTypography variant="overline" tone="muted">Between 09:30 and 17:00</VTypography>
      <VTimePicker v-model="office" format="24h" min="09:30" max="17:00" />
      <VTypography variant="caption" tone="muted">
        Nine o'clock stays open, and it is its first thirty minutes that go
      </VTypography>
    </div>

    <div class="group">
      <VTypography variant="overline" tone="muted">Quarter hours, on three hours</VTypography>
      <VTimePicker
        v-model="booking"
        format="24h"
        :minute-step="5"
        :allowed-hours="[9, 14, 16]"
        :allowed-minutes="(minute) => minute % 15 === 0"
      />
      <VTypography variant="caption" tone="muted">
        The face keeps only the five minute marks a rule leaves standing
      </VTypography>
    </div>
  </div>
</template>

<style scoped>
.row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--vectis-space-6);
}
.group {
  display: grid;
  gap: var(--vectis-space-2);
  max-inline-size: 20rem;
}
</style>

Format horaire

format choisit entre un cadran sur 12 heures, un anneau de chiffres avec la paire AM et PM à côté, et un cadran sur 24 heures, deux anneaux et aucune paire. Sans lui, la langue du lecteur décide. La valeur est la même dans les deux cas.

vue
format 12h
format 24h
<script setup lang="ts">
import { ref } from 'vue'
import { VTimePicker, VTypography } from 'vectis-ui'

/* Two faces, one value: half past seven in the evening is 19:30 on either of them. */
const twelve = ref<string | null>('19:30')
const twentyFour = ref<string | null>('19:30')
</script>

<template>
  <div class="row">
    <div class="group">
      <VTypography variant="overline" tone="muted">format 12h</VTypography>
      <VTimePicker v-model="twelve" format="12h" />
    </div>

    <div class="group">
      <VTypography variant="overline" tone="muted">format 24h</VTypography>
      <VTimePicker v-model="twentyFour" format="24h" />
    </div>
  </div>
</template>

<style scoped>
.row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--vectis-space-6);
}
.group {
  display: grid;
  gap: var(--vectis-space-2);
}
</style>

Localisation

locale décide ici de l'horloge : une langue qui compte en douze heures reçoit l'anneau simple, une qui compte en vingt-quatre l'anneau double. Elle l'emporte sur la locale globale et s'y rabat. Les mots, eux, viennent du dictionnaire.

vue
en-US, twelve hours
en-GB, twenty-four
ja-JP
<script setup lang="ts">
import { ref } from 'vue'
import { VTimePicker, VTypography } from 'vectis-ui'

/* Each keeps its own value, so adjusting one does not disturb the others. en-US and en-GB
   are the sharp pair: the same words, and only the clock between them. */
const locales = ref<{ tag: string; caption: string; time: string | null }[]>([
  { tag: 'en-US', caption: 'en-US, twelve hours', time: '19:30' },
  { tag: 'en-GB', caption: 'en-GB, twenty-four', time: '19:30' },
  { tag: 'ja-JP', caption: 'ja-JP', time: '19:30' },
])
</script>

<template>
  <div class="row">
    <div v-for="locale in locales" :key="locale.tag" class="group">
      <VTypography variant="overline" tone="muted">{{ locale.caption }}</VTypography>
      <VTimePicker v-model="locale.time" :locale="locale.tag" />
    </div>
  </div>
</template>

<style scoped>
.row {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: var(--vectis-space-6);
}
.group {
  display: grid;
  gap: var(--vectis-space-2);
}
</style>

API

Props

PropTypeDéfaut
formatTimePickerFormat'12h' | '24h'aucune
Si le cadran montre une horloge sur 12 ou sur 24 heures. Omise, la langue du lecteur décide, ce qui est presque toujours ce que l'on veut.
localestringaucune
Une locale BCP 47, qui décide de l'horloge. Elle l'emporte sur la locale globale du design system et retombe dessus, ce pourquoi elle n'a pas de valeur par défaut littérale.
minuteStepnumber1
L'intervalle sur lequel les minutes s'alignent, au glissement comme aux flèches. Le cadran n'affiche que les minutes qu'il peut atteindre : un pas d'un quart d'heure en marque quatre.
minstringaucune
L'heure la plus tôt que l'on puisse choisir, incluse, en chaîne canonique sur 24 heures. Le cadran laisse de côté ce qui tombe en dehors, comme il laisse de côté les minutes que le pas n'atteint pas.
maxstringaucune
L'heure la plus tard que l'on puisse choisir, incluse, écrite comme min.
allowedHoursTimePickerAllowedaucune
Les heures que l'on peut choisir : leur liste, ou une règle qui répond pour l'une d'elles. L'heure passée à une règle est toujours celle sur 24 heures, quelle que soit l'horloge affichée. Les heures qu'elle écarte ne sont pas affichées.
allowedMinutesTimePickerAllowedaucune
Les minutes que l'on peut choisir : leur liste, ou une règle qui répond pour l'une d'elles. Les minutes qu'elle écarte ne sont pas affichées.
disabledbooleanfalse
Rend toute l'horloge inutilisable : l'aiguille ne bouge plus, la demi-journée ne change plus, et tout se grise par les jetons de couleur.
readonlybooleanfalse
Montre l'heure sans permettre de la changer. Le cadran garde son focus et les deux grands chiffres basculent toujours entre heure et minutes, de sorte que la valeur reste lisible en entier.
labelstringaucune
Le nom accessible de l'horloge entière, ses deux chiffres et son cadran ensemble. Il retombe sur le dictionnaire, et un aria-label du consommateur l'emporte. Le cadran garde son propre nom, qui dit si l'aiguille est sur les heures ou sur les minutes.
v-modelstring | nullnull
L'heure, toujours en chaîne sur 24 heures quelle que soit l'horloge affichée : vous n'avez donc jamais à savoir laquelle la langue utilise. Sans valeur, le cadran affiche minuit plutôt que l'heure courante : lire l'horloge pendant le rendu ferait diverger une page dessinée sur un serveur de la même page dans le navigateur.

Événements

ÉvénementType
confirm[value: string | null]
Le lecteur a terminé, avec l'heure telle qu'elle est : les minutes ont été arrêtées AU CLAVIER. Relâcher un pointeur est la façon de cesser d'ajuster l'aiguille, pas de confirmer : cet événement ne part donc pas. Là où select de VDatePicker dit qu'une date a été choisie, celui-ci dit que le choix est fini.

Slots

SlotType
footer{}
Une bande au pied de l'horloge, la place des actions comme Annuler et OK.

Types

Les types que les tables ci-dessus nomment, écrits comme la librairie les déclare. Ceux qui portent export s'importent depuis vectis-ui pour typer votre propre code ; les autres décrivent la forme de ce qu'un slot fournit.

export type TimePickerAllowed = number[] | ((value: number) => boolean)

Variables CSS

TokenValeur
--vectis-control-size-time-picker-dial16rem
--vectis-control-size-time-picker-number3rem
--vectis-control-size-time-picker-center0.5rem
--vectis-control-size-time-picker-hand2px
--vectis-control-size-time-picker-hand-minor1rem