Snippets Date

Bootstrap 5 Date Range Picker with Two Months

A date range picker with two side-by-side months, range highlighting with hover preview, quick presets and apply or cancel actions.

Bootstrap 5 No jQuery Jun 2020 2.1K views

<section class="wdw-stage">
  <div class="container" style="max-width:780px">
    <div class="drp">
      <label for="drpInput" class="form-label fw-semibold">Select date range</label>
      <div class="input-group input-group-lg mb-3">
        <span class="input-group-text bg-body border-end-0 text-body-secondary" aria-hidden="true">
          <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="4.5" width="18" height="16" rx="3"/><path d="M8 2.5v4M16 2.5v4M3 10h18"/></svg>
        </span>
        <input type="text" class="form-control border-start-0 ps-0 fs-6" id="drpInput" readonly placeholder="Start date - End date" aria-haspopup="dialog" aria-expanded="true" aria-controls="drpPanel">
      </div>

      <div class="drp-panel wdw-card" id="drpPanel" role="dialog" aria-label="Choose date range">
        <div class="drp-body d-flex flex-column flex-lg-row">
          <div class="drp-presets d-flex flex-lg-column gap-2" role="group" aria-label="Quick ranges">
            <button type="button" class="btn btn-sm rounded-pill drp-preset" data-preset="7">Last 7 days</button>
            <button type="button" class="btn btn-sm rounded-pill drp-preset" data-preset="30">Last 30 days</button>
            <button type="button" class="btn btn-sm rounded-pill drp-preset" data-preset="month">This month</button>
            <button type="button" class="btn btn-sm rounded-pill drp-preset" data-preset="next">Next 14 days</button>
          </div>
          <div class="drp-months flex-grow-1">
            <div class="d-flex gap-4">
              <div class="flex-fill drp-month" role="group" aria-labelledby="drpTitle1">
                <div class="d-flex align-items-center justify-content-between mb-2">
                  <button type="button" class="btn btn-sm rounded-circle p-0 drp-nav" id="drpPrev" aria-label="Previous month"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg></button>
                  <div class="fw-bold text-center" id="drpTitle1"></div>
                  <button type="button" class="btn btn-sm rounded-circle p-0 drp-nav d-md-none" id="drpNext1" aria-label="Next month"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg></button><span class="drp-nav-spacer d-none d-md-block" aria-hidden="true"></span>
                </div>
                <div id="drpCal1"></div>
              </div>
              <div class="flex-fill drp-month d-none d-md-block" role="group" aria-labelledby="drpTitle2">
                <div class="d-flex align-items-center justify-content-between mb-2">
                  <span class="drp-nav-spacer " aria-hidden="true"></span>
                  <div class="fw-bold text-center" id="drpTitle2"></div>
                  <button type="button" class="btn btn-sm rounded-circle p-0 drp-nav " id="drpNext2" aria-label="Next month"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18l6-6-6-6"/></svg></button>
                </div>
                <div id="drpCal2"></div>
              </div>
            </div>
          </div>
        </div>
        <div class="d-flex flex-wrap align-items-center justify-content-between gap-3 pt-3 mt-3 border-top">
          <div class="small" id="drpSummary" aria-live="polite"></div>
          <div class="d-flex gap-2">
            <button type="button" class="btn btn-sm rounded-pill px-3 drp-cancel" id="drpCancel">Cancel</button>
            <button type="button" class="btn btn-sm btn-primary rounded-pill px-3" id="drpApply">Apply</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.