跳至主要内容
💬 回報這一頁

DateRange 期間選擇

儀表板與清單篩選的時間範圍。檔位是一等公民:今日/近 7 日/近 30 日/本月 一鍵切換,「自訂」才展開起訖輸入。

期間選擇(切到「自訂」試試把起訖選反)

目前值:2026-07-092026-08-07

在 Storybook 開啟

行為規範

規則說明
檔位含今日「近 7 日」=含今日往回 7 天;「本月」=本月 1 日至今日
起訖反了自動修正把「起」選到「迄」之後,另一端夾到同一天——反著選幾乎都是想選單日,不跳錯誤訊息
值的格式yyyy-mm-dd(本地日期,不含時區);跨時區解讀由宿主決定
初始化宿主用 dateRangeFromPreset("30d") 算初始值——跟元件同一套算法,不會差一天
const [range, setRange] = useState(() => dateRangeFromPreset("30d"));
<DateRange value={range} initialPreset="30d" onChange={setRange} />

刻意不做的:日曆格

視覺化日曆的鍵盤導覽、讀屏語意與在地化是一整座山,而檔位+原生 date 輸入 已涵蓋主要場景。原生輸入的外觀跨瀏覽器略有差異——接受,它換來免費的 日期驗證、行動裝置的原生選擇器與讀屏支援。

要視覺化日曆?先到缺件認領回報使用場景——三個實際場景湊齊(三次法則)就動工。

✅ 這樣做

儀表板與清單的期間篩選用檔位;查特定日期區間用「自訂」。

🚫 不要這樣

不要為了單一畫面自刻日曆——那會是全站第二種日期互動, 而且鍵盤與讀屏幾乎一定做不全。

取用

npx shadcn@latest add https://kielchang.github.io/dooping-design-book/r/date-range.json