Date range
Required range with Until left open
Required range with From left open
Required range with either end left open
Comparing seasons
Nights from the first day to the last.
Type both days, such as 12 May and 16 May.
Month grain on Date range
Date filter on or after a day
Date filter on or before a day
Date filter between two days
Cannot be changed
Only the owner can change this.
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-period">
<:label>Period</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name="period" current_preset="last_30_days" today={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} direction={:backward} last={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} compare={:previous_period} />
</:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>
<details :for={{key, label, ends, committed} <- [{"last", "Required range with Until left open", :last, Kit.Phoenix.Roles.DateRange.Committed.from(Kit.Phoenix.Time.day(reader(), ~D[2026-09-01]))}, {"first", "Required range with From left open", :first, Kit.Phoenix.Roles.DateRange.Committed.until(Kit.Phoenix.Time.day(reader(), ~D[2026-09-30]))}, {"either", "Required range with either end left open", :either, Kit.Phoenix.Roles.DateRange.Committed.empty()}]} data-specimen-case>
<summary>{label}</summary>
<Kit.Phoenix.Roles.FormGroup.form_group id={"phoenix-range-required-" <> key} required>
<:label>Period</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name={"required_" <> key} open_ends={ends} value={committed} presets={false} today={Kit.Phoenix.Time.day(reader(), ~D[2026-09-15])} direction={:either} />
</:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>
</details>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-seasons">
<:label>Period</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name="season" current_preset="autumn" today={Kit.Phoenix.Time.day(reader(), ~D[2026-12-18])} direction={:backward} compare={:previous_period}>
<:preset key="autumn" name="Autumn season" span={Kit.Phoenix.Time.day_range(reader(), ~D[2026-09-01], ~D[2026-12-18])} comparisons={%Kit.Phoenix.Time.Comparisons{previous_period: Kit.Phoenix.Time.day_range(reader(), ~D[2026-04-20], ~D[2026-07-10]), previous_year: Kit.Phoenix.Time.day_range(reader(), ~D[2025-09-08], ~D[2025-12-20])}} />
<:preset key="summer" name="Summer season" span={Kit.Phoenix.Time.day_range(reader(), ~D[2026-04-20], ~D[2026-07-10])} comparisons={%Kit.Phoenix.Time.Comparisons{previous_period: Kit.Phoenix.Time.day_range(reader(), ~D[2026-01-12], ~D[2026-03-27]), previous_year: Kit.Phoenix.Time.day_range(reader(), ~D[2025-04-21], ~D[2025-07-18])}} />
</Kit.Phoenix.Roles.DateRange.date_range>
</:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-stay">
<:label>Stay</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={Kit.Phoenix.Reader.new(:en, "America/New_York")} name="stay" value={Kit.Phoenix.Roles.DateRange.Committed.span(Kit.Phoenix.Time.day_range(Kit.Phoenix.Reader.new(:en, "America/New_York"), ~D[2025-11-26], ~D[2025-11-30]), nil, nil)} today={Kit.Phoenix.Time.day(Kit.Phoenix.Reader.new(:en, "America/New_York"), ~D[2025-04-09])} direction={:forward} first={Kit.Phoenix.Time.day(Kit.Phoenix.Reader.new(:en, "America/New_York"), ~D[2025-04-09])}>
<:preset key="this_weekend" span={Kit.Phoenix.Time.day_range(Kit.Phoenix.Reader.new(:en, "America/New_York"), ~D[2025-04-12], ~D[2025-04-13])} name="This weekend" />
<:preset key="next_week" span={Kit.Phoenix.Time.day_range(Kit.Phoenix.Reader.new(:en, "America/New_York"), ~D[2025-04-14], ~D[2025-04-20])} name="Next week" />
</Kit.Phoenix.Roles.DateRange.date_range>
</:control_set>
<:help>Nights from the first day to the last.</:help>
<:printed_value><time datetime="2025-11-26/2025-11-30"><span>November 26 – </span><wbr /><span>30, 2025</span></time></:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-trip">
<:label>Trip</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name="trip" value={Kit.Phoenix.Roles.DateRange.Committed.unresolved("12 May", "end of May")} presets={false} today={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} direction={:forward} first={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} />
</:control_set>
<:error>Type both days, such as 12 May and 16 May.</:error>
<:printed_value>12 May – end of May</:printed_value>
</Kit.Phoenix.Roles.FormGroup.form_group>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-month-range">
<:label>Period</:label>
<:control_set :let={binding}><Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name="month_period" grain={:month} compare={:previous_period} today={Kit.Phoenix.Time.day(reader(), ~D[2026-09-15])} direction={:either} /></:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>
<details :for={{key, label} <- [{"after", "Date filter on or after a day"}, {"before", "Date filter on or before a day"}, {"between", "Date filter between two days"}]} data-specimen-case>
<summary>{label}</summary>
<Kit.Phoenix.Layouts.List.Filter.filter id={"phoenix-date-filter-" <> key} name="Issued">
<Kit.Phoenix.Roles.FormGroup.form_group id={"phoenix-filter-range-" <> key}>
<:label>Issued</:label>
<:control_set :let={binding}><Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name={"issued_" <> key} open_ends={:either} presets={false} today={Kit.Phoenix.Time.day(reader(), ~D[2026-09-15])} direction={:either} /></:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>
</Kit.Phoenix.Layouts.List.Filter.filter>
</details>
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-period-disabled">
<:label>Period</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range disabled={true} binding={binding} reader={reader()} name="period" current_preset="last_30_days" today={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} direction={:backward} last={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} compare={:previous_period} />
</:control_set>
<:help>Only the owner can change this.</:help>
</Kit.Phoenix.Roles.FormGroup.form_group>
Date range, open
Source
<Kit.Phoenix.Roles.FormGroup.form_group id="phoenix-range-monday">
<:label>Period</:label>
<:control_set :let={binding}>
<Kit.Phoenix.Roles.DateRange.date_range binding={binding} reader={reader()} name="period" current_preset="last_30_days" today={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} direction={:backward} last={Kit.Phoenix.Time.day(reader(), ~D[2025-04-09])} compare={:previous_period} />
</:control_set>
</Kit.Phoenix.Roles.FormGroup.form_group>