フォーム 時間選択

<b-form-timepicker> は、BootstrapVue のカスタム時間選択入力フォームコントロールです。WAI-ARIA コンプライアンスと国際化サポートを提供します。

BootstrapVue v2.6.0 以降で使用可能です。

概要

<b-time> コンポーネントのフォームコントロールラッパーコンポーネントとして、追加のバリデーション状態の表示とコンパクトなインターフェースを提供します。ネイティブの HTML5 時間入力は、表示、アクセシビリティ、そして場合によっては一部のブラウザでサポートされていない点で異なります。<b-form-timepicker> は、すべてのブラウザプラットフォームとデバイスで一貫性のあるアクセシブルなインターフェースを提供します。

<template>
  <div>
    <b-form-timepicker v-model="value" locale="en"></b-form-timepicker>
    <div class="mt-2">Value: '{{ value }}'</div>
  </div>
</template>

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

<!-- b-form-timepicker.vue -->

v-model 戻り値

<b-form-timepicker> は常に 'HH:mm:ss' 形式の文字列を返します。これはネイティブブラウザの <input type="time"> コントロールによって返される形式と同じです。値の範囲は '00:00:00' から '23:59:59' ( 'h23' 時間サイクル構文を使用する24時間制)です。

時間が選択されていない場合、<b-form-timepicker> は空の文字列 ('') を返します。

無効と読み取り専用の状態

disabled プロパティを設定すると、<b-form-timepicker> コンポーネントのすべてのインタラクションが削除されます。

readonly プロパティを設定すると、時間の選択は無効になりますが、コンポーネントはインタラクティブなままになり、スピンボタン間をタブ移動できます。v-model は読み取り専用の状態では更新されません。

<template>
  <div>
    <b-form-group
      label="Select time picker interactive state"
      v-slot="{ ariaDescribedby }"
    >
      <b-form-radio-group
        v-model="state"
        :aria-describedby="ariaDescribedby"
        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-form-timepicker
      id="ex-disabled-readonly"
      :disabled="disabled"
      :readonly="readonly"
    ></b-form-timepicker>
  </div>
</template>

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

<!-- b-form-timepicker-disabled-readonly.vue -->

バリデーションの状態

<b-form-timepicker> は、ブール値の state プロパティを介して無効と有効のスタイルをサポートします。state をブール値 false に設定すると、入力が無効としてスタイル設定され、ブール値 true に設定すると、有効としてスタイル設定されます。statenull に設定すると、バリデーション状態のスタイルは表示されません (デフォルト)。

<template>
  <div>
    <label for="timepicker-invalid">Choose a time (invalid style)</label>
    <b-form-timepicker id="datepicker-invalid" :state="false" class="mb-2"></b-form-timepicker>

    <label for="timepicker-valid">Choose a time (valid style)</label>
    <b-form-timepicker id="datepicker-valid" :state="true"></b-form-timepicker>
  </div>
</template>

<!-- b-form-timepicker-validation.vue -->

ネイティブブラウザのバリデーションは <b-form-timepicker> では使用できません。

スタイル

秒スピンボタンの有効化

デフォルトでは、秒スピンボタンは表示されません。秒の選択を有効にするには、show-seconds プロパティを true に設定して、秒の選択スピンボタンを有効にします。show-seconds が false の場合(または指定されていない場合)、返される値の秒の部分は常に 00 に設定されます。

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

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

<!-- b-form-timepicker-show-seconds.vue -->

コントロールのサイズ

より小さく、または大きく <b-form-timepicker> コントロールしたいですか?size プロパティを小さなフォームコントロールには 'sm' 、大きなフォームコントロールには 'lg' に設定します。これは、ポップアップ時間選択ダイアログのサイズには影響しません。

<template>
  <div>
    <label for="timepicker-sm">Small time picker</label>
    <b-form-timepicker id="timepicker-sm" size="sm" locale="en" class="mb-2"></b-form-timepicker>

    <label for="timepicker-lg">Large time picker</label>
    <b-form-timepicker id="timepicker-lg" size="lg" locale="en"></b-form-timepicker>
  </div>
</template>

<!-- b-form-timepicker-control-size.vue -->

プレースホルダー

placeholder プロパティを使用して、日付が選択されていない場合にコントロールにカスタムプレースホルダーテキストを追加します。プレースホルダーが指定されていない場合、label-no-time-selected プロパティの値が使用されます。

<template>
  <div>
    <label for="timepicker-placeholder">Time picker with placeholder</label>
    <b-form-timepicker id="timepicker-placeholder" placeholder="Choose a time" locale="en"></b-form-timepicker>
  </div>
</template>

<!-- b-form-timepicker-placeholder.vue -->

オプションコントロール

now-button プロパティまたは reset-button プロパティを使用して、カレンダーポップアップの下部にオプションのコントロールボタンを追加します。デフォルトの閉じるボタンは、no-close-button プロパティを使用して削除できます。

  • 「今」ボタンは現在時刻を選択します。
  • リセットボタンは、選択された時刻をクリアするか、reset-value プロパティの値(指定されている場合)に時刻を設定します。
  • 閉じるボタンは時間ポップアップを閉じます。
<template>
  <div>
    <label for="timepicker-buttons">Time picker with optional footer buttons</label>
    <b-form-timepicker
      id="timepicker-buttons"
      now-button
      reset-button
      locale="en"
    ></b-form-timepicker>
  </div>
</template>

<!-- b-form-timepicker-footer-buttons.vue -->

オプションのボタンのテキストは、label-now-buttonlabel-reset-button 、および label-close-button プロパティで設定できます。フッターセクションの幅が限られているため、これらのラベルを短くすることをお勧めします。

ドロップダウンプロパティ rightdropupdroprightdropleftno-flip 、および offset を使用して、ポップアップカレンダーの位置を制御します。

これらのプロパティの効果と使用方法の詳細については、<b-dropdown> の位置決めに関するセクションを参照してください。

ボタンのみモード

v2.7.0+

時間選択ダイアログを起動するボタンだけが必要な場合、または独自のオプションテキスト入力フィールドを提供したい場合は、button-only プロパティを使用して、時間選択をドロップダウンボタンとしてレンダリングします。フォーマットされた時間ラベルは sr-only クラスでレンダリングされます(スクリーンリーダーでのみ使用可能)。

次の簡単な例では、時間選択(ボタンのみモード)を <b-input-group> に追加しています。

<template>
  <div>
    <label for="example-input">Choose a time</label>
    <b-input-group class="mb-3">
      <b-form-input
        id="example-input"
        v-model="value"
        type="text"
        placeholder="HH:mm:ss"
      ></b-form-input>
      <b-input-group-append>
        <b-form-timepicker
          v-model="value"
          button-only
          right
          show-seconds
          locale="en"
          aria-controls="example-input"
        ></b-form-timepicker>
      </b-input-group-append>
    </b-input-group>
    <p>Value: '{{ value }}'</p>
  </div>
</template>

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

<!-- b-form-timepicker-button-only.vue -->

size プロパティでボタンのサイズを、button-variant プロパティでボタンのバリアントを制御します。

国際化

時間インターフェースの国際化は、時間コントロールの要素に適用されるラベル(aria-ラベル、選択状態など)を除いて、Intl.DateTimeFormatIntl.NumberFormat を介して提供されます。これらのラベルには独自の翻訳を提供する必要があります。使用可能なロケールはブラウザによって異なります(すべてのブラウザがすべてのロケールをサポートするわけではありません)。

デフォルトでは、<b-form-timepicker> はブラウザのデフォルトのロケールを使用しますが、locale プロパティを使用して使用するロケール(またはロケール)を指定できます。このプロパティは、単一のロケール文字列またはロケール文字列の配列(最も優先されるロケールから最も優先されないロケールまで順にリストされます)を受け入れます。

発信された 'context' イベントには、時間コントロールが解決したロケール( Intl のサポートされているロケールによっては、要求されたロケールとは異なる場合があります)が含まれます。

Node.js を使用する場合のサーバーサイドレンダリング (SSR) では、使用している Node.js ランタイムが Intl と使用するロケールをサポートしていることを確認してください。詳細については、Node Intl サポートドキュメントを参照してください。

<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="6">
      <b-form-timepicker
        v-model="value"
        v-bind="labels[locale] || {}"
        :locale="locale"
        show-seconds
        @context="onContext"
      ></b-form-timepicker>
    </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',
            labelCloseButton: 'Schließen'
          },
          'ar-EG': {
            labelHours: 'ساعات',
            labelMinutes: 'الدقائق',
            labelSeconds: 'ثواني',
            labelAmpm: 'صباحا مساء',
            labelAm: 'ص',
            labelPm: 'م',
            labelIncrement: 'زيادة',
            labelDecrement: 'إنقاص',
            labelSelected: 'الوقت المحدد',
            labelNoTimeSelected: 'لا وقت المختار',
            labelCloseButton: 'قريب'
          },
          zh: {
            labelHours: '小时',
            labelMinutes: '分钟',
            labelSeconds: '秒',
            labelAmpm: '上午下午',
            labelAm: '上午',
            labelPm: '下午',
            labelIncrement: '增量',
            labelDecrement: '减量',
            labelSelected: '选定时间',
            labelNoTimeSelected: '没有选择时间',
            labelCloseButton: '关'
          }
        }
      }
    },
    methods: {
      onContext(ctx) {
        this.context = ctx
      }
    }
  }
</script>

<!-- b-form-time-i18n.vue -->

hourCycle の理解

世界中で使用されている時間体系(時計)には、12時間制と24時間制の2つの主なタイプがあります。hourCycle プロパティを使用すると、特定のロケールで使用される時計の種類にアクセスできます。時間サイクルの種類にはいくつかの異なる値があり、以下の表にリストされています。hourCycle は、時間 '00:00:00' (1日の始まり)を特定のロケールのユーザーにどのように表示/フォーマットするべきかを知らせます。'context' イベントには、解決済みの hourCycle 値が含まれています。

hourCycle 説明
'h12' 112 を使用する時間システム。午前12時00分から始まる12時間制。
'h23' 023 を使用する時間システム。午前0時00分から始まる24時間制。
'h11' 011 を使用する時間システム。午前0時00分から始まる12時間制。
'h24' 124 を使用する時間システム。午前24時00分から始まる24時間制。

ネイティブ HTML5 <input type="date">'h23' 形式で時間値を返し、<b-form-timepicker>'h23' 形式で v-model を返します。この値は、選択されたロケール によって、<b-form-timepicker> コンポーネントの GUI(スピンボタン)にユーザーに表示されるものとは異なる場合があります。

注記:IE 11 はロケールの hourCycle 値の解決をサポートしていません。そのため、解決済みの hour12 値に基づいて h12 または h23 のいずれかを想定しています。

12時間または24時間インターフェースの強制

12時間表記と24時間表記のどちらを使用するかは、クライアントブラウザのデフォルトロケール(または`localeプロパティから解決されたロケール)によって決まります。12時間表記のユーザーインターフェースを強制するには、プロパティ`hour12を`trueに設定します。24時間表記のユーザーインターフェースを強制するには、プロパティ`hour12を`falseに設定します。プロパティ`hour12のデフォルト値は`nullであり、解決されたロケールを使用して使用するインターフェースを決定します。

`hour12`プロパティの設定は、時間スピンボタンのフォーマットに使用するhourCycleに影響します。これは時間スピンボタンのフォーマットに影響する可能性がありますが、フォーマットされた時間文字列の結果は、特定のロケールに対するクライアント`Intl.DateTimeFormat`のサポートの制限により、`'h12`または`'h23'`の形式で表示される可能性があります。したがって、**ロケールのデフォルトの時間/時刻のフォーマットを表示するために、`hour12`プロパティを`null(デフォルト)に設定しておくことをお勧めします**。

アクセシビリティ

ポップアップ時刻は、<b-time>と同じキーボードコントロールをサポートしており、さらに以下の機能があります。

  • Escキーを押すと、時刻を選択せずにポップアップ時刻を閉じます。

タイムピッカーを国際化する場合、国際的なスクリーンリーダーユーザーが正しいプロンプトと説明を聞くことができるように、`label-*`プロパティを適切に翻訳された文字列に更新することが重要です。

詳細については、<b-time>のドキュメントを参照してください。

実装に関するメモ

<b-form-timepicker>は、コンポーネント<b-time><b-dropdown>に基づいています。

<b-form-timepicker>は、Bootstrapのボーダーとフレックスのユーティリティクラス、ボタン(`btn-*`)クラス、ドロップダウン(`dropdown*`)クラス、および`form-control*`(および検証)クラスを使用します。タイムピッカーとポップアップを適切にスタイル設定するためには、BootstrapVueのカスタムSCSS/CSSも必要です。

参照

コンポーネントリファレンス

<b-form-timepicker>

v2.6.0+

コンポーネントエイリアス

<b-form-timepicker> は、以下のエイリアスでも使用できます。

  • <b-timepicker>

注:コンポーネントエイリアスは、BootstrapVue全体をインポートする場合、またはコンポーネントグループプラグインを使用する場合にのみ使用できます。

プロパティ

すべてのプロパティのデフォルト値は、グローバルに設定可能です。

プロパティ
(昇順でソートするにはクリック)
(昇順でソートするにはクリック)
デフォルト
説明
aria-labelledby
文字列このコンポーネントのラベルを提供する要素のID。`aria-labelledby`属性の値として使用されます。
boundary
HTMLElementまたはString'scrollParent'メニューの境界制約:「`'scrollParent'`」、「`'window'`」、「`'viewport'`」、または`HTMLElement`への参照。
button-only
v2.7.0+
ブール値false日付ピッカーをフォームコントロールではなくドロップダウンボタンとしてレンダリングします。
button-variant
v2.7.0+
文字列'secondary'`button-only`プロパティが設定されていない場合、効果はありません。`button-only`モードで使用されるボタンの変種。
close-button-variant
文字列'outline-secondary'オプションの`close`ボタンに使用するボタンの変種。
disabled
ブール値falseタイムピッカーを非対話型の無効状態にします。
dropleft
ブール値false設定されている場合、メニューをボタンの左側に配置します。
dropright
ブール値false設定されている場合、メニューをボタンの右側に配置します。
dropup
ブール値false設定されている場合、メニューをボタンの上部に配置します。
footer-tag
文字列'footer'フッターのデフォルトタグの代わりにレンダリングするHTMLタグを指定します。
form
文字列フォームコントロールが属するフォームのID。コントロールの`form`属性を設定します。
header-tag
文字列'header'ヘッダーのデフォルトタグの代わりにレンダリングするHTMLタグを指定します。
hide-header
ブール値false設定されている場合、選択された時刻のヘッダーを視覚的に非表示にします。
hour12
ブール値null3状態のプロパティ。`true`の場合、インターフェースを12時間形式に強制します。`false`の場合、インターフェースを24時間形式に強制します。`null`の場合、現在のロケールによって12時間または24時間インターフェースが決定されます(デフォルト)。
id
文字列レンダリングされたコンテンツの`id`属性を設定するために使用され、必要に応じて追加の要素IDを生成するためのベースとして使用されます。
label-am
文字列'AM''AM'が選択されている場合、AM/PMスピンボタンに表示されるテキスト。
label-ampm
文字列'AM/PM'AM/PMスピンボタンの`aria-label`属性の値。
label-close-button
文字列'Close'`Close`ボタンのコンテンツ。
label-decrement
文字列'Decrement'スピンボタンの`-`ボタンの`aria-label`属性の値。
label-hours
文字列'Hours'`Hours`スピンボタンの`aria-label`属性の値。
label-increment
文字列'Increment'スピンボタンの`+`ボタンの`aria-label`属性の値。
label-minutes
文字列'Minutes'`Minutes`スピンボタンの`aria-label`属性の値。
label-no-time-selected
文字列'No time selected'時刻が選択されていない場合に表示する文字列。
label-now-button
文字列'Select now'オプションの`Select now`ボタンのコンテンツ。
label-pm
文字列'PM''PM'が選択されている場合、AM/PMスピンボタンに表示されるテキスト。
label-reset-button
文字列'Reset'オプションの`Reset`ボタンのコンテンツ。
label-seconds
文字列'Seconds'`Seconds`スピンボタンの`aria-label`属性の値。
label-selected
文字列時刻が選択されている場合に非表示になるsr-only文字列。
locale
ArrayまたはStringコンポーネントが使用するロケール(またはロケール)。ロケールの配列を渡す場合、ロケールの順序は最も優先されるロケールから最も優先されないロケールになります。指定されていない場合、クライアントのデフォルトロケールが使用されます。
menu-class
ArrayまたはObjectまたはStringポップアップメニューラッパーに適用するクラス(またはクラス)。
minutes-step
NumberまたはString1分スピンボタンのステップ値。60で均等に分割できる値にする必要があります。
name
文字列フォームコントロールの`name`属性の値を設定します。
no-close-button
ブール値false設定されている場合、閉じるボタンの表示を無効にします。
no-flip
ブール値falseメニューが自動的に位置を反転するのを防ぎます。
now-button
ブール値false設定されている場合、オプションの`select now`ボタンが表示されます。
now-button-variant
文字列'outline-primary'オプションの`select today`ボタンに使用するボタンの変種。
offset
NumberまたはString0メニューをシフトするピクセル数を指定します。負の値もサポートされます。
placeholder
文字列日付が選択されていない場合にフォームコントロールに表示するテキスト。`label-no-date-selected`プロパティ値がデフォルトです。
popper-opts
オブジェクト{}Popper.jsに渡す追加の設定。
readonly
ブール値falseタイムピッカーを対話型の読み取り専用状態にします。`v-model`の更新を無効にしますが、スピンボタンへのフォーカスは許可されます。
required
ブール値false設定されている場合、コンポーネントに`aria-required="true"`属性を追加します。必須の検証はアプリケーションで処理する必要があります。
reset-button
ブール値false設定されている場合、オプションの`reset`ボタンが表示されます。
reset-button-variant
文字列'outline-danger'オプションの`reset`ボタンに使用するボタンの変種。
reset-value
DateまたはStringオプションの`reset`ボタンをクリックすると、選択された時刻がこの値に設定されます。デフォルトでは、選択された値がクリアされます。
right
ブール値falseメニューの右端をボタンの右端に揃えます。
seconds-step
NumberまたはString1秒スピンボタンのステップ値。60で均等に分割できる値にする必要があります。
show-seconds
ブール値false真の場合、秒のスピンボタンを表示します。偽の場合、秒のスピンボタンは表示されず、時間の秒の部分は常に`0`になります。
サイズ
文字列コンポーネントの外観サイズを設定します。 'sm'、'md'(デフォルト)、または'lg'
状態
ブール値nullコンポーネントの検証状態の外観を制御します。有効な場合は`true`、無効な場合は`false`、検証状態がない場合は`null`

v-model
文字列''最初に選択された時間値。`HH:mm:ss`形式の文字列を受け入れます。有効な値の範囲は`00:00:00`から`23:59:59`です。

v-model

プロパティ
イベント
入力

スロット

名前
スコープ付き
説明
button-content タイマーピッカーのアイコンボタンに配置するコンテンツ

イベント

イベント
引数
説明
コンテキスト
  1. context - `b-time`コンテキストオブジェクト。詳細は`b-time`のドキュメントを参照してください。
`b-time`コンテキストイベント。ユーザーがマウスまたはカーソル操作でスピンボタンの値を変更したときに発生します。コンポーネントが最初にインスタンス化されたとき、またはロケールが変更されたときにも発生します。
hidden v2.9.0+ピッカーポップアップが非表示になったときに発生します。
入力
  1. time - `HH:mm:ss`形式(24時間形式)の文字列
v-modelを更新するときに発生します。
shown v2.9.0+ピッカーポップアップが表示されたときに発生します。

個々のコンポーネントのインポート

次の名前付きエクスポートを使用して、個々のコンポーネントをプロジェクトにインポートできます。

コンポーネント
名前付きエクスポート
インポートパス
<b-form-timepicker>BFormTimepickerbootstrap-vue

import { BFormTimepicker } from 'bootstrap-vue'
Vue.component('b-form-timepicker', BFormTimepicker)

Vue.jsプラグインとしてのインポート

このプラグインには、上記にリストされているすべての個々のコンポーネントが含まれています。プラグインには、コンポーネントのエイリアスも含まれています。

名前付きエクスポート
インポートパス
FormTimepickerPluginbootstrap-vue

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