kit

Date range

Built revision v17.10.0

Phoenix
Topics

Human support

Bring a missing role, layout, or state, or a rendering against the standard, to the session working on kit. Name the package and the entry.

On List, Reports

Date range

Period
Compare
Required range with Until left open
Period
From 1 September 2026
Required range with From left open
Period
Until 30 September 2026
Required range with either end left open
Period
Comparing seasons
Period
Compare
Stay
Nights from the first day to the last.
Trip
12 May – end of May Type both days, such as 12 May and 16 May.
Month grain on Date range
Period
Compare
Date filter on or after a day
Issued
Date filter on or before a day
Issued
Date filter between two days
Issued
Cannot be changed
Period
Compare
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

Show it 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>