时间组件(Time)

BootstrapVue的custom<b-time>组件生成符合WAI-ARIA的时间选择小部件,该小部件可用于控制其他组件,或用于创建自定义的时间选择器输入。

<b-time>符合WAI-ARIA辅助功能,针对键盘控制(箭头键、上/下翻页键、home键和end键)进行了优化。还支持国际化,如果未指定区域设置,则默认为浏览器或页面的区域设置。

如果需要将时间选择器用作自定义窗体控件输入,请改用<b-form-timepicker>组件。

BootstrapVue v2.6.0引入了<b-time>组件。

No time selected
--
--
AM

Value: ''

Context:

{
  "locale": "en",
  "isRTL": false,
  "hourCycle": "h12",
  "hour12": true,
  "hours": null,
  "minutes": null,
  "seconds": 0,
  "value": "",
  "formatted": "No time selected"
}
<template>
  <b-row>
    <b-col md="auto">
      <b-time v-model="value" locale="en" @context="onContext"></b-time>
    </b-col>
    <b-col>
      <p>Value: <b>'{{ value }}'</b></p>
      <p class="mb-0">Context:</p>
      <pre class="small">{{ context }}</pre>
    </b-col>
  </b-row>
</template>

<script>
  export default {
    data() {
      return {
        value: '',
        context: null
      }
    },
    methods: {
      onContext(ctx) {
        this.context = ctx
      }
    }
  }
</script>

v-model return value 返回值

<b-time> 始终返回HH:mm:ss 格式的字符串,该格式与本机浏览器<input type="time"> 控件返回的格式相同。该值将在'00:00:00''23:59:59'的范围内(使用'h23'小时循环语法的24小时时钟)

如果未选择时间,则<b-time>返回空字符串('')。

Select time interactive state
No time selected
--
--
AM
<template>
  <div>
    <b-form-group label="Select time interactive state">
      <b-form-radio-group v-model="state" aria-controls="ex-disabled-readonly">
        <b-form-radio value="disabled">Disabled</b-form-radio>
        <b-form-radio value="readonly">Readonly</b-form-radio>
        <b-form-radio value="normal">Normal</b-form-radio>
      </b-form-radio-group>
    </b-form-group>
    <b-time id="ex-disabled-readonly" :disabled="disabled" :readonly="readonly"></b-time>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        state: 'disabled'
      }
    },
    computed: {
      disabled() {
        return this.state === 'disabled'
      },
      readonly() {
        return this.state === 'readonly'
      }
    }
  }
</script>

式样

Enabling of seconds spinbutton 启用秒旋转按钮

默认情况下,不会显示“秒”微调按钮。若要启用秒部分,请将show-seconds属性设置为true,以启用“秒选择”微调按钮。当show-secondsfalse(或未提供)时,返回值将始终将时间字符串的seconds部分设置为00

No time selected
--
--
--
AM
Value: ''
<template>
  <b-time v-model="value" show-seconds locale="en"></b-time>
  <div class="mt-2">Value: '{{ value }}'</div>
</template>

<script>
  export default {
    data() {
      return {
        value: ''
      }
    }
  }
</script>

Hiding the top selected time header 隐藏选定的顶部时间标题

默认情况下,当前选定的时间将显示在时间组件的顶部,并以区域设置的语言进行格式化。

您可以通过hide-header道具隐藏此标题。注意,这只会在视觉上隐藏所选时间,同时使屏幕阅读器用户可以将其作为aria-live活动区域使用。

Border and padding 边框和填充

想要一个有填充边框的时间控件吗?使用引导程序的边框和填充实用程序类添加边框和填充:

No time selected
--
--
AM
<template>
  <b-time class="border rounded p-2" locale="en"></b-time>
</template>

Default slot 默认插槽

通过使用默认广告位,在时间界面的底部提供可选内容。 该插槽可用于添加按钮,例如“立即”或“重置”等。

No time selected
--
--
--
AM
<template>
  <b-time v-model="value" show-seconds locale="en">
    <div class="d-flex" dir="ltr">
      <b-button
        size="sm"
        variant="outline-danger"
        v-if="value"
        @click="clearTime"
      >
        Clear time
      </b-button>
      <b-button
        size="sm"
        variant="outline-primary"
        class="ml-auto"
        @click="setNow"
      >
        Set Now
      </b-button>
    </div>
  </b-time>
</template>

<script>
  export default {
    data() {
      return {
        value: null
      }
    },
    methods: {
      setNow() {
        const now = new Date()
        // Grab the HH:mm:ss part of the time string
        this.value = now.toTimeString().slice(0, 8)
      },
      clearTime() {
        this.value = ''
      }
    }
  }
</script>

事件

input event

更新 v-model时会发出 'input'事件。事件有一个参数, 该参数是作为字符串选择的时间。该值是'HH:mm:ss'格式的字符串(如果未选择时间,则为空字符串)。有效值在 '00:00:00'23:59:59'的范围内。

如果未设置show-seconds属性,则时间值的秒数部分将始终为'00'

如果设置了disabledreadonly属性,则不会发出'input'事件。

context event

每当用户选择时间或更改其中一个微调按钮的值时,都会发出 'context'事件。当组件被创建时(就在插入到DOM之前),或者当解析的语言环境发生更改时,它也会被发出。

当设置了disabledreadonly属性时,不会发出该事件(创建时间组件时的初始发出除外)。

'context'事件作为唯一参数传递给一个context对象,该对象具有以下属性:

属性 描述
value 当前值为HH:mm:ss字符串或空字符串(如果未选择时间)
formatted 在已解析的区域设置中格式化的当前值,如果未选择时间,则为标签无时间属性
hours 当前选定的小时(始终为24小时,h23'格式)为数字,如果没有小时则为
minutes 当前选定的分钟为数字,如果没有分钟则为
seconds 当前选定的秒值为数字,如果没有秒值则为
locale 时间选择器解析的区域设置,这可能与请求的区域设置不同
isRTL 如果语言环境是RTL(从右到左),则为true
hour12 指示接口是否使用12小时格式的布尔值
hourCycle 表示用于旋转按钮的小时周期类型的字符串:'h11''h12' 'h23''h24'

有关上下文属性localehour12hourCycle的信息,请参阅Internationalization section部分。

Internationalization 国际化

时间接口的国际化通过 Intl.DateTimeFormat Intl.NumberFormat 提供,但应用于时间控件元素(aria标签、选定状态等)的标签除外。您必须为这些标签提供自己的翻译。可用的区域设置将取决于浏览器(并非所有浏览器都支持所有区域设置)。

默认情况下<b-time> 将使用浏览器的默认区域设置,但您可以通过区域设置属性指定要使用的区域设置(或区域设置)。该属性接受单个区域设置字符串或区域设置字符串数组(按最首选区域设置到最不首选区域设置的顺序列出)。

发出的'context'事件将包括时间控件解析到的区域设置(可能与请求的区域设置不同,具体取决于支持的Intl区域设置)。

对于使用Node.js时的服务器端呈现(SSR),请确保正在使用的Node.js运行时支持Intl和将要使用的区域设置。有关详细信息,请参阅Node Intl support documentation

No time selected
--
--
--
AM

Value: ''

Context:

{
  "locale": "en-US",
  "isRTL": false,
  "hourCycle": "h12",
  "hour12": true,
  "hours": null,
  "minutes": null,
  "seconds": null,
  "value": "",
  "formatted": "No time selected"
}
<template>
  <b-row>
    <b-col cols="12" class="mb-3">
      <label for="example-locales">Locale:</label>
      <b-form-select id="example-locales" v-model="locale" :options="locales"></b-form-select>
    </b-col>
    <b-col md="auto">
      <b-time
        v-model="value"
        v-bind="labels[locale] || {}"
        :locale="locale"
        show-seconds
        @context="onContext"
      ></b-time>
    </b-col>
    <b-col>
      <p>Value: <b>'{{ value }}'</b></p>
      <p class="mb-0">Context:</p>
      <pre class="small">{{ context }}</pre>
   </b-col>
  </b-row>
</template>

<script>
  export default {
    data() {
      return {
        value: '',
        context: null,
        locale: 'en-US',
        locales: [
          { value: 'en-US', text: 'English US (en-US)' },
          { value: 'de', text: 'German (de)' },
          { value: 'ar-EG', text: 'Arabic Egyptian (ar-EG)' },
          { value: 'zh', text: 'Chinese (zh)' }
        ],
        labels: {
          de: {
            labelHours: 'Stunden',
            labelMinutes: 'Minuten',
            labelSeconds: 'Sekunden',
            labelIncrement: 'Erhöhen',
            labelDecrement: 'Verringern',
            labelSelected: 'Ausgewählte Zeit',
            labelNoTimeSelected: 'Keine Zeit ausgewählt'
          },
          'ar-EG': {
            labelHours: 'ساعات',
            labelMinutes: 'الدقائق',
            labelSeconds: 'ثواني',
            labelAmpm: 'صباحا مساء',
            labelAm: 'ص',
            labelPm: 'م',
            labelIncrement: 'زيادة',
            labelDecrement: 'إنقاص',
            labelSelected: 'الوقت المحدد',
            labelNoTimeSelected: 'لا وقت المختار'
          },
          zh: {
            labelHours: '小时',
            labelMinutes: '分钟',
            labelSeconds: '秒',
            labelAmpm: '上午下午',
            labelAm: '上午',
            labelPm: '下午',
            labelIncrement: '增量',
            labelDecrement: '减量',
            labelSelected: '选定时间',
            labelNoTimeSelected: '没有选择时间'
          }
        }
      }
    },
    methods: {
      onContext(ctx) {
        this.context = ctx
      }
    }
  }
</script>

Understanding the hourCycle 了解hourCycle

世界上有两种主要的计时惯例:12小时制和24小时制。hourCycle 属性允许您访问特定区域设置使用的时钟类型。小时循环类型可以有几个不同的值,如下表所示。hourCycle 表示时间'00:00:00'(一天的开始)应如何呈现/格式化给特定区域设置的用户。 'context' event 包括已解析的hourCycle 值。

hourCycle Description
'h12' 使用112小时制。12小时制,午夜12点开始
'h23' 使用023的小时制。24小时制,午夜从0:00开始
'h11' 使用011的小时制。12小时制,午夜从凌晨0点开始
'h24' 使用124小时制。24小时制,午夜从24:00开始

原生HTML5<input type="date">'h23'格式返回时间值,也以 'h23' 格式返回v-model。此值可能不同于通过 <b-time> 组件的GUI(旋转按钮)向用户显示的值,具体取决于所选的locale selected

注意: IE11不支持解析区域设置的hourCycle值,因此我们假设h12h23基于解析的hour12值。

Forcing 12 or 24 hour interface 强制12或24小时接口

12小时输入与24小时输入由客户端浏览器的默认语言环境(或从语言环境属性解析的语言环境)决定。要强制12小时用户界面,请将prop hour12 设置为true。 要强制24小时用户界面,请将prop hour12 设置为false。prop hour12的默认值为null,它使用解析的区域设置来确定要使用哪个接口。

hour12属性的设置将影响解析哪个hourCycle 以格式化hours微调按钮。请注意,虽然这可能会影响小时微调按钮的格式,但由于客户端对特定区域设置的Intl.DateTimeFormat支持的限制,格式化的时间字符串结果可能会显示'h12'h23'格式。因此,建议将hour12 prop设置为null(默认值),以便显示区域设置的默认时间/小时格式。

Accessibility

<b-time>提供了许多辅助功能,如aria-live区域、角色、aria标签、快捷键和全键盘导航,可用于大多数屏幕阅读器。

键盘导航:

  • 箭头向上递增当前选定的微调按钮值
  • 箭头向下 递减当前选定的微调按钮值
  • Home 将选定的微调按钮设置为最小值
  • End 将选定的微调按钮设置为最大值
  • PageUp 将选定的spinbutton值按spinbutton的步长增大一个较大的值
  • PageDown 按spinbutton的步长将选定的spinbutton值减小一个较大的值
  • 箭头右移焦点到组件中的下一个旋转按钮
  • 箭头左移焦点到组件中的上一个旋转按钮

一些label-*属性在屏幕上不可见,但用于为屏幕阅读器用户标记日历中的各种元素。e、g便签选择的属性被添加到显示选定值的元素中。

国际化日期选择器时,还必须使用适当的翻译字符串更新label-*属性,以便国际屏幕阅读器用户能够听到正确的提示和说明。

Implementation notes

<b-time>组件基于自定义BootstrapVue组件<b-form-spinbutton>

<b-time>使用Bootstrap的margin、padding、border和flex实用程序类,以及button(btn-*)类和表单控件类类。BootstrapVue的自定义s CSS/CSS也是正确样式所必需的。

另请参阅

组件引用

<b-time>

v2.6.0+

属性

属性 (Click to sort Ascending) 类型 默认值 描述
id String 用于在渲染的内容上设置“id”属性,并用作根据需要生成任何其他元素ID的基础
value v-model String 初始选择的时间值。接受'HH:mm:ss'字符串。有效值范围从“00:00:00”到“23:59:59”`
show-seconds Boolean false 如果为true,则显示“秒”微调按钮。如果'false',则不会显示seconds旋转按钮,时间的seconds部分始终为'0`
hour12 Boolean 如果“true”,则将接口强制为12小时格式。如果“false”,则强制将接口设置为24小时格式。如果“null”,则当前区域设置将确定12小时或24小时界面(默认设置)
locale String or Array 组件要使用的区域设置(或区域设置)。当传递一个区域设置数组时,区域设置的顺序是从最优先到最不优先。如果未提供,则默认为客户端默认区域设置
aria-labelledby String 为该组件提供标签的元素的ID。用作“aria labelledby”属性的值
seconds-step Number or String 1 秒微调按钮的步长值。应该是一个平均分为60的值
minutes-step Number or String 1 分钟微调按钮的步长值。应该是一个平均分为60的值
disabled Boolean false 设置为“true”时,禁用组件的功能并将其置于禁用状态
readonly Boolean false 设置窗体控件的“readonly”属性/td>
hide-header Boolean false 设置后,可视地隐藏选定的时间标题
label-no-time-selected String 'No time selected' 未选择时间时显示的字符串
label-selected String 'Selected time' 选择时间时仅隐藏sr字符串
label-hours String 'Hours' “小时”微调按钮上“aria label”属性的值
label-minutes String 'Minutes' “分钟”微调按钮上“aria label”属性的值
label-seconds String 'Seconds' “秒”微调按钮上“aria label”属性的值
label-ampm String 'AM/PM' “AM/PM”微调按钮上“aria label”属性的值
label-am String 'AM' 选择“AM”时要在AM/PM微调按钮中显示的文本
label-pm String 'PM' 选择“PM”时显示在AM/PM微调按钮中的文本
label-increment String 'Increment' spinbuttons`+`button上的“aria label”属性的值
label-decrement String 'Decrement' spinbuttons上“aria label”属性的值“-”按钮
hidden Boolean false

v-model

属性 事件
value input

插槽

插槽名称 描述
default 用于将自定义控件放置在时间组件的底部

事件

事件 参数 描述
input
  1. value - 以“HH:mm:ss”字符串形式选定的时间。如果未选择时间,则为空字符串
更新v-model的事件
context
  1. context - 上下文对象。详见文件
每当内部模型状态或区域设置更新时发出。也在最初创建组件时发出

导入单个组件

您可以通过以下命名的导出将单个组件导入到项目中:

组件 命名输出 导入路径
<b-time> BTime bootstrap-vue

示例:

import { BTime } from 'bootstrap-vue'
Vue.component('b-time', BTime)

导入为Vue.js插件

该插件包括上面列出的所有单个组件。插件还包括任何组件别名。

命名输出 导入路径
TimePlugin bootstrap-vue

示例:

import { TimePlugin } from 'bootstrap-vue'
Vue.use(TimePlugin)