隨機日期產生器 會在兩個含端點的 YYYY-MM-DD 日期之間,均勻地抽出日曆日期,整個過程完全在您的瀏覽器中執行,沒有日光節約時間的偏移,且每次產生有 1,000 個日期的硬性上限。本速查表彙整了所有輸入、驗證規則、輸出格式、模式旗標與限制,讓您使用此工具時無需猜測。產生器會將每個日期視為一個 UTC 整數日序數,以從 1970-01-01 算起、精確 86,400,000 毫秒為單位測量,然後將每個選中的位置對應回 UTC 元件的 YYYY-MM-DD。隨機性來自瀏覽器的 Web Crypto getRandomValues,而非 Math.random(),並透過拒絕抽樣 (rejection-sampling) 程序消除純粹模運算所帶來的模數偏差。產生的清單永遠不會離開您的瀏覽器,工具不會靜默修復無效輸入,而編輯任何控制項都會清除先前的清單,因此舊的結果不會假冒符合新設定的輸出。無論您是設定抽籤、Excel 測試固定資料、課堂抽樣器,或寫作靈感排程,都可將以下章節當作快速參考。

產生器接受的輸入一覽
此工具提供三個控制項加上一個切換開關。每一項都有特定的格式,若設定錯誤也會有特定的失敗模式。
| 控制項 | 接受的格式 | 接受的範圍 | 若違反規則 |
|---|---|---|---|
| 開始日期 | 嚴格的 YYYY-MM-DD | 0001-01-01 至 9999-12-31 | 回報為無效;絕不會靜默修復 |
| 結束日期 | 嚴格的 YYYY-MM-DD | 0001-01-01 至 9999-12-31,必須等於或晚於開始日期 | 回報為無效;絕不會靜默修復 |
| 數量 | 整數 | 1 至 1,000 | 空白、零、分數、負數或超過 1,000 會產生清楚的錯誤訊息,明確說明並未截斷任何資料 |
| 允許重複 | 切換開關 | 開或關 | 在唯一模式下,若數量大於含端點的天數跨度將被拒絕 |
兩端日期皆可被選中。從 2024-02-28 到 2024-03-01 的範圍,可能會抽出 2 月 28 日、2 月 29 日 (閏日) 或 3 月 1 日,絕不會只回傳兩端。一天的範圍是有效的,且必定只回傳那單一日期;若您需要該日期的多份複本,必須啟用重複模式。
如何使用隨機日期產生器
- 挑選開始日期與結束日期,格式須為嚴格的 YYYY-MM-DD。兩端日期都會包含在候選池中,因此請將它們設定為您想抽樣的精確含端點範圍。
- 輸入介於 1 到 1,000 之間的數量,並決定是否允許重複。對於從完整範圍中獨立抽樣,請保持切換開關為開啟;若希望每個日曆日只抽一次,請將其關閉。
- 產生清單,確認顯示的範圍與數量符合您的輸入,然後複製或記錄您在測試固定資料、範例排程、課堂抽籤或寫作靈感中需要的 YYYY-MM-DD 值。
編輯任一端點、數量或重複旗標,都會清除先前的結果,因此以舊設定產生的清單不會停留在畫面上,假裝符合目前的控制項。
日期驗證規則
驗證規則嚴格,且以 UTC 元件執行,遵循 ECMAScript Date 所實作的西曆行為 (依據 ECMAScript 規範:Date 物件 參考資料)。一般來說,能被 4 整除的年份為閏年,但世紀年除非能被 400 整除,否則為平年。實際上,這表示 2000-02-29 與 2024-02-29 會被接受為有效的日曆日期,而 1900-02-29 與 2023-02-29 則會被拒絕。月份與日期溢位也會被拒絕:例如 2025-04-31 這類輸入不會悄悄變成 5 月 1 日。實作使用 setUTCFullYear,而非 Date.UTC 傳統的兩位數年份解讀,因此 0001 至 0099 年會保持其字面意義的年份,而不會被位移到二十世紀。支援的西曆範圍從 0001-01-01 到 9999-12-31。
日光節約時間行為
產生器抽樣的是 UTC 整數日序數,並以 UTC 元件格式化結果,而非在當地午夜的時間上加時數。這項區別正是本工具存在的全部理由。在當地時間加上 24 小時,於時鐘變更時可能落在 23:00 或 01:00,導致顯示的日期被跳過或重複。將嚴格的 YYYY-MM-DD 轉為 UTC Date 物件上的年、月、日,讀回元件,將 UTC 毫秒值精確地除以 86,400,000,然後相對於 1970-01-01 在這些整日位置上抽樣,即為結構性的修正方法。相同的做法在 在 JavaScript 中產生不含日光節約時間漂移的隨機日期 一文亦有說明,而底層的日期語意則由上述 ECMAScript 規範所定義。
重複模式 vs 唯一模式
| 行為 | 重複模式 (切換開啟) | 唯一模式 (切換關閉) |
|---|---|---|
| 抽樣方法 | 每次要求的抽樣獨立地從完整含端點範圍中抽樣 | 稀疏的局部 Fisher-Yates 不放回抽樣 |
| 同一個日期會重複嗎? | 會,這是設計上的預期行為 | 不會;每個日期最多只出現一次 |
| 每個候選日期的機率 | 每次抽樣皆相等 | 每次抽樣皆相等,但會移除先前已抽中的項目 |
| 在小範圍內的數量上限 | 最多 1,000,即使範圍只有一天 | 不得超過含端點的天數跨度 |
| 記憶體使用輪廓 | 隨所要求的數量成長 | 隨所要求的數量成長,而非隨數百萬天的範圍成長 |
| 若數量過大 | 僅當數量超過 1,000 時才會產生錯誤 | 當數量超過可用日期數時會產生錯誤;絕不會悄悄啟用重複 |
| 適用情境 | 蒙地卡羅測試資料、課堂抽樣、骰子式重複 | 不重複的生日、稽核紀錄、唯一的範例排程 |
機率相等並不保證某次執行結果看起來均勻分布,而且重複模式確實可能合理地重複某些值。若您希望某次結果一眼看起來較為平衡,請多抽一些再自行刪減。
輸出格式與結果限制
結果以穩定的 YYYY-MM-DD 格式回傳,與輸入所要求的格式相同。產生器絕不會附加時段、時區時差或長日期格式。日期並不會排除週末、國定假日、歷史曆法轉換、無法預訂的日期或機構特定的禁日時段,因此請在使用某日期進行實際流程前另行檢查這些限制。硬性的結果上限為每次產生 1,000 個日期。空白的數量、分數、零、負數或超過 1,000 的數值,會產生清楚的錯誤訊息,明確說明允許範圍且未截斷任何資料。唯一模式會拒絕大於可用日期數的數量,而不會回傳較少的結果或悄悄啟用重複模式。
隨機性方法與稽核指引
隨機性取自瀏覽器的 Web Crypto,透過 getRandomValues 取得無符號 32 位元字組 (unsigned 32-bit words),依據 W3C Web Cryptography API 參考資料。若直接以模運算將隨機字組對應到日期,當範圍大小無法整除 2^32 時,部分日期會多出一個可能的來源值,因此產生器採用拒絕抽樣程序:只接受大小為可用日期數之精確倍數的最大前導區間,再套用模運算。如此每個被接受的序數都擁有相同數量的對應 32 位元值。一個有限度的安全防護機制會在 API 反覆回傳位於被拒絕尾端的值時,回報隨機來源失敗。本工具不使用 Math.random()。若需用於確定性的軟體測試,請儲存產生的日期或執行您自己的具種子產生器;Web Crypto 在本介面中刻意無法被植入種子。若某次抽選具有財務、法律、競賽、安全或稽核上的影響,請使用具備獨立監督與證據留存的文件化程序,因為本工具提供的是用於一般實務工作、謹慎且無偏差的抽樣,而非經認證的隨機抽籤服務。
若您正在權衡各種選項,隨機 IP 產生器範例:各模式輸出 一文對此有詳細說明。