Web Components Date Range Picker (日付範囲ピッカー) の概要

    Ignite UI for Web Components Date Range Picker は、テキスト入力とカレンダー ポップアップを含む軽量なコンポーネントで、ユーザーが開始日と終了日を簡単に選択できます。日付範囲の制限や設定可能な日付フォーマットなど、さまざまなアプリケーション要件に合わせて高いカスタマイズ性を提供します。

    Date Range Picker の例

    以下は、カレンダーのポップアップを使用して開始日と終了日を選択できる IgcDateRangePickerComponent コンポーネントのサンプルです。

    作業の開始

    IgcDateRangePickerComponent の使用を開始するには、最初に次のコマンドを実行して Ignite UI for Web Components をインストールする必要があります。

    npm install igniteui-webcomponents
    

    次に、以下のように、IgcDateRangePickerComponent とそれに必要な CSS をインポートし、そのモジュールを登録する必要があります:

    import { defineComponents, IgcDateRangePickerComponent } from 'igniteui-webcomponents';
    import 'igniteui-webcomponents/themes/light/bootstrap.css';
    
    defineComponents(IgcDateRangePickerComponent);
    

    これで、Web Components IgcDateRangePickerComponent の基本構成から始めることができます。

    Ignite UI for Web Components の完全な概要については、作業の開始トピックを参照してください。

    使用方法

    IgcDateRangePickerComponent では、ドロップダウンやカレンダーのポップアップから日付範囲を選択するか、開始日と終了日それぞれの入力フィールドに直接入力することで、日付範囲を指定できます。

    ピッカーは、日付を表示するために 「シングル インプット モード」 と 「2 インプット モード」 の 2 タイプのモードを提供します。シングル インプット モードでは、フィールドは編集不可で、日付範囲を入力して変更することはできません。一方で 2 インプット モードでは、開始日と終了日を別々の入力欄に入力して編集できます。

    カレンダーが表示されている場合、開始日と終了日を選択することで日付範囲を指定できます。最初の日付を選択すると、開始日と終了日の両方がその日付に設定され、次に日付を選ぶと終了日として設定されます。すでに範囲が選択されている状態で別の日付をクリックすると、新しい範囲の選択が開始されます。

    Date Range Picker の表示

    デフォルトのシングル インプット モードで IgcDateRangePickerComponent をインスタンス化するには、次のコードを使用します:

    <igc-date-range-picker>
    </igc-date-range-picker>
    

    IgcDateRangePickerComponent を 2 つの入力欄を使用するように切り替えるには、useTwoInputs プロパティを true に設定します。

    <igc-date-range-picker use-two-inputs="true">
    </igc-date-range-picker>
    

    Value (値)

    ユーザーによる選択または入力に加えて、IgcDateRangePickerComponent の範囲値は Value プロパティを使用して設定することもできます。値は次の形式に従う必要があります: { start: startDate, end: endDate }、ここで startDateendDate は選択された範囲を表す Date オブジェクトです。

    let dateRange = document.querySelector('igc-date-range-picker') as IgcDateRangePickerComponent;
    let startDate = new Date(2025, 4, 6);
    let endDate = new Date(2025, 4, 8);
    dateRange.value = { start: startDate, end: endDate }
    

    値は属性として設定することもできます。この場合、値は JSON として正しく解析可能なオブジェクトである必要があり、startend フィールドには ISO 8601 形式の日付値を持たせる必要があります。

    <igc-date-range-picker value='{"start":"2025-01-01","end":"2025-01-02"}'>
    <igc-date-range-picker/>
    

    Read-only (読み取り専用) および Non-editable (編集不可)

    IgcDateRangePickerComponent を読み取り専用に設定すると、入力やカレンダーでの範囲変更が無効になり、キーボード ナビゲーションも無効になります。また、カレンダーやクリア アイコンも視覚的に無効状態になります。これは、value 属性で範囲を設定し、それを表示専用にしたい場合に便利です。この動作を有効にするには、readOnly プロパティを設定するだけです。

    <igc-date-range-picker use-two-inputs="true" readonly>
    </igc-date-range-picker>
    

    あるいは、nonEditable プロパティを使用することもできます。これは readOnly とは異なり、入力欄のタイピングによる編集のみを禁止し、カレンダーからの選択やクリア アイコンでのリセットは可能です。

    <igc-date-range-picker use-two-inputs="true" non-editable="true">
    </igc-date-range-picker>
    

    ポップアップ モード

    デフォルトでは、IgcDateRangePickerComponent をクリックすると、カレンダーのポップアップが dropdown モードで表示されます。mode プロパティを dialog に設定することで、カレンダーを dialog モードで開くこともできます。

    <igc-date-range-picker mode="dialog">
    </igc-date-range-picker>
    

    キーボード ナビゲーション

    IgcDateRangePickerComponent は直感的なキーボード ナビゲーションに対応しており、マウスを使わずに値の増減や入力マスクのセクション間の移動が可能です。

    使用可能なキーボード ナビゲーション オプションは、コンポーネントがシングル インプット モードか 2 インプット モードかによって異なります。

    2 インプット モード:

    キー 説明
    カレットを 1 文字左に移動します
    カレットを 1 文字右に移動します
    CTRL + 左矢印 カレットを現在の入力マスク セクションの先頭、またはすでに先頭にいる場合は前のセクションの先頭に移動します
    CTRL + 右矢印 カレットを現在の入力マスク セクションの末尾、またはすでに末尾にいる場合は次のセクションの末尾に移動します
    現在フォーカスされている入力マスクのセクションの値を 1 ステップ増加させます
    ↓</kbd 現在フォーカスされている入力マスクのセクションの値を 1 ステップ減少させます
    HOME カレットを入力マスクの先頭に移動します
    END カレットを入力マスクの末尾に移動します
    CTRL + ; 現在の日付をコンポーネントの値として設定します

    シングル インプットおよび 2 インプット モードの両方:

    キー 説明
    ALT + ↓</kbd カレンダーのドロップダウンを開きます
    ALT + カレンダーのドロップダウンを閉じます

    キーボードを使用してカレンダー ポップアップ内を移動することもできます。ナビゲーションは IgcCalendarComponent コンポーネントと同じです。

    キー 説明
    + + + 月内の日付間を移動します
    ENTER 現在フォーカスされている日を選択します
    PAGE UP 前の月に移動します
    PAGE DOWN 次の月に移動します
    SHIFT + PAGE UP 前年に移動します
    SHIFT + PAGE DOWN 翌年に移動します
    HOME 表示されている月のうち、最も早い月の最初の日にフォーカスします (または 1 か月ビューの場合はその月の最初の日)
    END 表示されている月のうち、最も遅い月の最後の日にフォーカスします (または 1 か月ビューの場合はその月の最後の日)
    Escape カレンダーのポップアップを閉じます

    レイアウト

    Label (ラベル)

    シングル インプット モードの場合、label プロパティを使用して IgcDateRangePickerComponent コンポーネントにラベルを設定できます。2 インプット モードでは、labelStart および labelEnd プロパティを使用して、それぞれ開始日および終了日の入力フィールドにラベルを設定できます。

    <igc-date-range-picker label="Date Range">
    </igc-date-range-picker>
    
    <igc-date-range-picker use-two-inputs="true" label-start="Start Date" label-end="End Date">
    </igc-date-range-picker>
    

    Format (形式)

    入力フィールドに表示される日付形式をカスタマイズすることも可能です。この目的のために使用できるプロパティは、localeinputFormat、および displayFormat の 3 つです。

    locale プロパティでは、使用するロケール識別子を指定でき、地域の慣習に基づいて日付の表示形式が決定されます。 たとえば、日付を日本形式で表示したい場合、locale プロパティを次のように設定します:

    <igc-date-range-picker locale="ja-JP">
    </igc-date-range-picker>
    

    日付形式を手動で定義したい場合は、カスタム形式の文字列を渡して inputFormat プロパティを使用できます。

    <igc-date-range-picker input-format="dd/MM/yy">
    </igc-date-range-picker>
    

    displayFormat プロパティはカスタム形式文字列も受け入れますが、入力フィールドがアイドル状態 (つまり、フォーカスされていない状態) の場合にのみ適用されます。フィールドにフォーカスがある場合、形式はデフォルト、または inputFormat で定義された形式に戻ります (両方のプロパティが使用されている場合)。

    <igc-date-range-picker input-format="dd/MM/yy" display-format="yy/MM/dd">
    </igc-date-range-picker>
    

    カレンダーのレイアウトと形式

    さまざまなプロパティを使用して、ポップアップ カレンダーをさらにカスタマイズできます。

    名前 タイプ 説明
    orientation 'vertical' または 'horizontal' カレンダーを縦向きまたは横向きで表示するかを設定できます。
    visibleMonths string 一度に表示する月数 (1 または 2) を指定します。
    showWeekNumbers string カレンダーに週番号の列を表示するかどうかを設定します。
    open boolean カレンダー ピッカーが開いているかどうかを判断します。
    keepOpenOnSelect boolean 日付を選択した後もカレンダー ピッカーを開いたままにします。
    keepOpenOnOutsideClick boolean カレンダー ピッカーの外側をクリックしても、カレンダー ピッカーを開いたままにします。
    weekStart string 週の最初の曜日を設定します。
    hideOutsideDays boolean 現在の月ビューの範囲外の日を非表示にします。
    hideHeader boolean カレンダー ヘッダーを非表示にします (ダイアログ モードでのみ適用されます)。
    headerOrientation 'vertical' または 'horizontal' カレンダーのヘッダーを縦方向または横方向に配置します (ダイアログ モードのみ)。
    activeDate Date カレンダーで最初にハイライト表示される日付を設定します。設定されていない場合は、現在の日付がアクティブ日付になります。
    <igc-date-range-picker orientation="vertical" visible-months="1" show-week-numbers="true">
    </igc-date-range-picker>
    

    Min (最小値) および Max (最大値)

    min および max プロパティを使用して、定義した範囲外の日付を無効にすることで、ユーザーの入力を制限することもできます。これらのプロパティはバリデーターとして機能するため、範囲外の日付が手動で入力された場合でも、IgcDateRangePickerComponent は無効になります。

    <igc-date-range-picker min="2025-05-06" max="2025-05-10">
    </igc-date-range-picker>
    

    カスタムおよび定義済みの日付範囲

    customRanges プロパティを使用して、範囲選択を高速化するために、カレンダー ポップアップにカスタム日付範囲チップを追加することもできます。たとえば、現在の日付を終了日とし、今後 7 日間の範囲をすぐに選択できるカスタム日付範囲チップを作成できます。さらに、usePredefinedRanges プロパティを設定すると、カスタム チップに加えて定義済みの範囲チップも表示されます。

    const today = new Date();
    
    const nextSeven = new Date(
      today.getFullYear(),
      today.getMonth(),
      today.getDate() + 7 
    );
    const nextWeek: CustomDateRange[] = [
      {
        label: 'Next 7 days',
        dateRange: {
          start: today,
          end: nextSeven
        }
      }
    ]
    
    const dateRange = document.querySelector('igc-date-range-picker') as IgcDateRangePickerComponent;
    dateRange.customRanges = nextWeek;
    dateRange.usePredefinedRanges = true;
    

    これで、カレンダーのポップアップ内に表示された 「次の 7 日間」 チップをクリックすると、本日から次の 7 日間までの範囲が自動的に選択されます。

    無効日と特別な日

    カレンダーで無効な日付を設定して、ユーザーが選択できる日付の範囲を絞り込むこともできます。無効にする日付を設定するには、disabledDates プロパティを使用できます。

    let dateRange = document.querySelector('igc-date-range-picker') as IgcDateRangePickerComponent;
    
    const minDate = new Date(2025, 4, 1);
    const maxDate = new Date(2025, 4, 31);
    
    dateRange.disabledDates = [
      {
        type: DateRangeType.Between,
        dateRange: [minDate, maxDate]
      }
    ] as DateRangeDescriptor[];
    

    disabledDates プロパティが提供するすべての可能性に関する詳細情報は、以下で確認できます: 無効日

    同様に、カレンダーに 1 日または複数の日付を特別な日として設定したい場合も可能です。この場合は specialDates プロパティを使用します。(特別な日)

    フォーム

    IgcDateRangePickerComponent コンポーネントは、HTML フォーム要素とシームレスに使用することもできます。minmaxrequired プロパティはフォーム検証子として機能します。

    追加構成

    プロパティ

    すでに紹介したプロパティに加えて、IgcDateRangePickerComponent コンポーネントには動作をさらに細かく設定できるさまざまなプロパティが用意されています。

    名前 タイプ 説明
    disabled boolean コンポーネントを無効にします。
    nonEditable boolean 入力フィールドでの入力を無効にします。
    placeholder string シングル インプット モード時のプレースホルダー テキスト。
    placeholderStart string 開始日入力 (2 インプット モード) のプレースホルダー テキスト。
    placeholderEnd string 終了日入力 (2 インプット モード) のプレースホルダー テキスト。
    outlined boolean Material テーマで、入力部分をアウトライン表示にするかどうかを設定します。
    prompt string 入力マスクで未入力部分に表示されるプロンプト文字。
    resourceStrings IgcDateRangePickerResourceStrings 日付範囲ピッカーとカレンダーをローカライズするためのリソース文字列。

    スロット

    IgcDateRangePickerComponent コンポーネントでは、利用可能なスロットを使用して、カスタム コンテンツを追加したり、外観を変更したりすることも可能です。

    シングル インプット モードでは、prefix および suffix スロットを使って、入力フィールドの前後にカスタム コンテンツを挿入できます。

    <igc-date-range-picker>
      <igc-icon slot="prefix" name="down_arrow_icon"></igc-icon>
      <igc-icon slot="suffix" name="upload_icon"></igc-icon>
    </igc-date-range-picker>
    

    2 インプット モードでは、prefix-startprefix-endsuffix-startsuffix-end スロットを使用して、それぞれの入力に対してカスタム コンテンツを追加できます。

    clear-icon および calendar-icon スロットを使用すると、入力欄内のクリア ボタンとカレンダー ボタンのアイコンをカスタマイズできます。

    <igc-date-range-picker>
      <igc-icon slot="clear-icon" name="apps_icon"></igc-icon>
      <igc-icon slot="calendar-icon" name="bin_icon"></igc-icon>
    </igc-date-range-picker>
    

    2 インプット モードでは、separator スロットを使用して、開始日と終了日の入力欄の間に表示されるデフォルトの「~」テキストをカスタマイズできます。

    <igc-date-range-picker use-two-inputs="true">
      <span slot="separator">till</span>
    </igc-date-range-picker>
    

    actions スロットを使用すると、独自のロジックを持つカスタム アクション ボタンを挿入できます。たとえば、以下のボタンはカレンダーの週番号の列を切り替えます。

    <igc-date-range-picker id="DateRange">
      <igc-button slot="actions" onclick="DateRange.showWeekNumbers = true">Toggle Week Numbers</igc-button>
    </igc-date-range-picker>
    

    これまでに説明したスロットに加えて、IgcDateRangePickerComponent コンポーネントでは次のスロットも使用できます。

    名前 説明
    title カレンダーのタイトルのコンテンツを描画します。ダイアログ モードでのみ適用されます。
    helper-text 入力フィールドの下にコンテンツを描画します。
    header-date カレンダー ヘッダーのデフォルトの現在の日付/範囲テキストを置き換えます。ダイアログ モードでのみ適用されます。
    clear-icon-start 開始入力 (2 インプット モード) のカスタム クリア アイコン。
    clear-icon-end 終了入力 (2 インプット モード) のカスタム クリア アイコン。
    calendar-icon-start 開始入力 (2 インプット モード) のカスタム カレンダー アイコン。
    calendar-icon-end 終了入力 (2 インプット モード) のカスタム カレンダー アイコン。
    calendar-icon-open ピッカーが開いているときに表示されるアイコンまたはコンテンツ (2 インプット モードの両方に適用)。
    calendar-icon-open-start 開始入力 (2 インプット モード) の開いた状態で表示されるアイコンやコンテンツ。
    calendar-icon-open-end 終了入力 (2 インプット モード) の開いた状態で表示されるアイコンやコンテンツ。

    メソッド

    IgcDateRangePickerComponent は、プロパティやスロットに加えて、次のメソッドも公開しています:

    名前 説明
    show カレンダー ピッカー コンポーネントを表示します。
    hide カレンダー ピッカー コンポーネントを非表示にします。
    toggle カレンダー ピッカーの表示/非表示を切り替えます。
    clear 入力フィールドをクリアして、ユーザー入力を削除します。
    select ピッカーで日付範囲の値を選択します。
    setCustomValidity カスタム検証メッセージを設定します。提供されたメッセージが空でない場合、入力は無効 (invalid) としてマークされます。

    スタイル設定

    IgcDateRangePickerComponent コンポーネントは IgcCalendarComponent コンポーネントを使用しているため、Calendar の CSS パーツも継承されており、両コンポーネントをシームレスにスタイル設定できます。Calendar コンポーネントで使用可能なすべての CSS パーツの一覧はこちらをご覧ください: カレンダーのスタイル設定。Calendar の CSS パーツに加えて、IgcDateRangePickerComponent は以下のような独自の CSS パーツも提供しており、外観をさらにカスタマイズできます:

    名前 説明
    separator 2 つの入力欄の間に表示されるセパレーター要素。
    ranges カスタムおよび定義済み範囲を表示するラッパー。
    label ターゲットの入力の上に表示されるラベルのラッパー。
    container すべての主要な入力要素を保持するメイン ラッパー。
    input ネイティブ入力要素。
    prefix プレフィックス ラッパー。
    suffix サフィックス ラッパー。
    calendar-icon カレンダー アイコンのラッパー (閉じた状態)。
    calendar-icon-start 開始入力のカレンダー アイコンのラッパー (閉じた状態、2 インプット)。
    calendar-icon-end 終了入力のカレンダー アイコンのラッパー (閉じた状態、2 インプット)。
    calendar-icon-open カレンダー アイコンのラッパー (開いた状態)。
    calendar-icon-open-start 開始入力のカレンダー アイコンのラッパー (開いた状態、2 インプット)。
    calendar-icon-open-end 終了入力のカレンダー アイコンのラッパー (開いた状態、2 インプット)。
    clear-icon クリア アイコンのラッパー (シングル インプット)。
    clear-icon-start 開始入力 (2 入力) のクリア アイコン ラッパー。
    clear-icon-end 終了入力 (2 入力) のクリア アイコン ラッパー。
    actions アクション ラッパー。
    helper-text ターゲットの入力の下にコンテンツを描画するヘルパー テキスト ラッパー。
    igc-date-range-picker::part(label) {
      color: var(--ig-gray-600);
    }
    
    igc-date-range-picker::part(calendar-icon-start),
    igc-date-range-picker::part(calendar-icon-end) {
      background-color: var(--ig-primary-500);
      color: var(--ig-primary-500-contrast);
    }
    
    igc-date-range-picker::part(calendar-icon-open-start),
    igc-date-range-picker::part(calendar-icon-open-end) {
      background-color: var(--ig-primary-700);
      color: var(--ig-primary-700-contrast);
    }
    
    igc-date-range-picker::part(clear-icon-start),
    igc-date-range-picker::part(clear-icon-end) {
      background-color: var(--ig-error-500);
      color: var(--ig-error-500-contrast);
    }
    

    API リファレンス

    その他のリソース