DateTimeRange

開始と終了の日時を並べて入力します。

日時
開始
終了
東京(UTC+9)
終日:時刻の欄を隠す
休館日
開始
終了
狭い場所:時刻の欄を日付の欄の下に回す
取材
開始
終了
右から左に読む場合
الموعد
البداية
النهاية

使いどころ

  • 予定や予約のように、開始と終了の日付と時刻をまとめて決める時に使います。
  • 時刻の要らない単日・期間は DatePicker、日付か時刻の一つだけなら Field で包んだ DateField・TimeField を使います。

使い方

legend と、送信する名前の接頭辞 name を渡します。start・end には初めの date(YYYY-MM-DD)と time(HH:MM)を渡します。Basecamp 2の予定のパネルの「Starts: / Ends:」と同じく、枠も面も持たずに開始と終了を縦に積み、それぞれ先頭側の列に欄の側へ寄せた黒い名前(12px)を置き、その後ろに日付の欄と時刻の欄を一行に並べます。名前の列の幅は開始と終了でそろえます。欄は標準の日付・時刻入力(DateField・TimeField)です。

送信する値:name="event" なら、各欄の値を event[start_date]・event[start_time]・event[end_date]・event[end_time] で送ります。終日のSwitchはオンの時だけ event[all_day] に 1 を送り、オフの時は送りません。

allDay で終日のSwitchをオンにしておきます。終日の間は時刻の欄を隠しますが、欄に残っている値は送信されます。終日の時に時刻をどう扱うかはサーバー側で決めます。

timezone を渡すと、枠の下に地球のアイコンとタイムゾーンを添えます。表示だけで、送信はしません。

置き場所の幅が26rem未満の狭い場所では、時刻の欄を日付の欄の下に回し、欄を名前の後ろの幅いっぱいに広げます。

開始と終了の前後関係や、未入力の検証は行いません。利用側とサーバー側で検証します。各欄の変更は DateField・TimeField のcontrollerが発火する date-field:change・time-field:change で受け取れます。

JavaScriptが無い時も、標準の日付・時刻入力とチェックボックスとして同じ名前で送信できます。

アクセシビリティ

  • 枠は fieldset で、legend がまとまりの名前です。日付と時刻の欄は「開始の日付」「終了の時刻」のように、startLabel・endLabel を先頭に付けた名前を持ちます。
  • 終日のSwitchは role="switch" のcheckboxです。

イベント

DateTimeRangeが発火するイベント
イベント内容
date-field:beforechange日付の欄を利用者が変えた時、確定の前に発火します。取り消せます(取り消すと元の値に戻します)。detailは { value, previousValue, reason } で、reason は pointer か keyboard です。
date-field:change日付の欄の変更を確定した後に発火します。detailは date-field:beforechange と同じです。
time-field:beforechange時刻の欄を利用者が変えた時、確定の前に発火します。取り消せます。detailは { value, previousValue, reason } です。
time-field:change時刻の欄の変更を確定した後に発火します。detailは time-field:beforechange と同じです。

API

DateTimeRange

開始と終了を縦に積み、それぞれ名前の後ろに日付と時刻の欄を一行に並べる。終日にすると時刻の欄を隠す。日付と時刻の欄は共通のDateField・TimeField。

DateTimeRangeのprops
名前型既定値説明
name必須string送信する名前の接頭辞。${name}[start_date]・[start_time]・[end_date]・[end_time]・[all_day]で送信する。
idstringルートの fieldset に付けるID。
legend必須string枠全体の名前。legendに出す。
startPoint{}開始の初期の日付と時刻。
endPoint{}終了の初期の日付と時刻。
allDaybooleanfalse終日のSwitchをオンにしておく。オンの間は時刻の欄を隠す。
timezonestring渡すと、末尾側に地球のアイコンとタイムゾーンを添える。
startLabelstring"開始"開始側の小さなラベル。日付と時刻の欄の読み上げ名(「開始の日付」など)の接頭辞にも使う。
endLabelstring"終了"終了側の小さなラベル。日付と時刻の欄の読み上げ名の接頭辞にも使う。
allDayLabelstring"終日"終日のSwitchの名前。

ほかに、<fieldset>へ標準のHTML属性を渡せます。

登録するcontroller:date-field(DateFieldController)、time-field(TimeFieldController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/field.css、components/icon.css、components/switch.css、components/date-time-range.css

Point

Point
名前型既定値説明
datestring日付(YYYY-MM-DD)。
timestring時刻(HH:MM)。

コード

HTML
Hono JSX