您可以透過瀏覽器型的隨機日期工具,輸入起始日期、結束日期,以及介於 1 到 1,000 之間的數量,來產生隨機日期,然後讀回不包含日光節約時間漂移的包含式 YYYY-MM-DD 值。隨機日期產生器使用整數 UTC 日序數,從包含式範圍中抽取日曆日期,因此兩個端點之間的每一天——包括兩個端點本身——都有相同的被選中機率。兩個端點都是合格的:從 2024-02-28 到 2024-03-01 的範圍,可以回傳 2 月 28 日、閏日 2 月 29 日,或 3 月 1 日。每次抽取都使用瀏覽器的 Web Crypto getRandomValues API 搭配拒絕抽樣,這消除了當 2^32 無法整除範圍大小時所出現的微小模數偏差。此工具支援從西元 0001 年到 9999 年的民用日期,嚴格驗證 Gregorian 閏年規則,並且絕不會將無效的月份或日期靜默地往前遞進。關於範圍或產生的列表,所有內容都不會被上傳,且所有計算都由同一個瀏覽器分頁在本地端處理。

為何專用的隨機日期工具能有所助益
大多數初次嘗試產生隨機日期的做法,都是就近取材——試算表公式、簡短的腳本,或寫死的清單。這些做法都會悄悄地引進問題。在起始日期上加上隨機天數的試算表公式,通常會依賴本地時區以及工作表的序列日期基準點,這代表日期可能會在日光節約時間邊界附近落在錯誤的日子。手寫的腳本經常會挑選一個毫秒偏移量,然後反覆加上 86,400,000,這種做法會在本地時鐘往前或往後調整時,遺漏或重複日期。自己滾動式產生清單則完全移除了隨機性,並悄悄地讓每次抽取偏向您最先想到的那些日期。
專用工具透過將每個日期視為單一整數——其在相對 1970-01-01 之曆法中的位置——並對該整數進行均勻抽樣,來迴避這些問題。由於天數是透過 UTC Date 物件計算,並以 UTC getter 來格式化結果,所選日期絕不會受到使用者時鐘設定、瀏覽器語系或實體位置的影響。即使使用者離線也是如此,這讓此工具可在密封的測試環境中,或在嚴格的企業 Proxy 後方使用。
逐步產生隨機日期
- 挑選有效的起始日期與結束日期。兩個端點都可能被選中,因此僅一天的範圍必定會回傳該日期。起始日期不得晚於結束日期;任何其他組合都會被視為無效輸入,而非靜默地交換兩個值。
- 輸入介於 1 到 1,000 之間的數量,並決定是否允許重複。若關閉重複,數量便不能超過包含式範圍內的日曆天數,工具會回報錯誤而非縮短清單。若開啟重複,則每次抽取都是對完整範圍的獨立樣本。
- 產生日期、驗證顯示的範圍與數量,並複製或記下您需要的值。編輯任一端點、更改數量,或切換重複模式,都會清除先前的結果與任何先前的錯誤,因此在不同的設定下產生的清單,不可能仍停留在畫面上看起來像符合目前的控制項。
包含式抽樣如何避免日光節約時間漂移
產生器將每個 YYYY-MM-DD 輸入轉成整數,方式是對 UTC Date 物件設定年、月、日,再讀回各個分量。然後將 UTC 毫秒值除以正好 86,400,000,得到相對 1970-01-01 的整數日序數。抽樣作用於這些整數序數之上,選中的序數再以 UTC getter 格式化回日期。這避免了常見的日光節約時間錯誤:加上 24 個本地小時後,時間落在 23:00 或 01:00、在時鐘轉換附近跳過或重複某個顯示日期。根據ECMAScript 規範中關於 Date 物件的規定,可被 4 整除的年份通常是閏年,世紀年是平年,除非能被 400 整除,而諸如 30 天的月份第 31 日這類溢位會被拒絕,而非往前遞進。實作採用的是 setUTCFullYear,而非 Date.UTC 內部傳統的兩位數年份解讀,因此 0001 到 0099 的年份會保持其字面年份,而不會被推移到二十世紀。
隨機性來自瀏覽器 Web Crypto 的 getRandomValues API,透過 32 位元無符號字。若以原始模數將一個隨機字映射到日期,當範圍大小無法整除 2^32 時,某些日期會多出一個可能的來源值。此工具透過拒絕抽樣移除該偏差:只接受大小為可用日期數之確切倍數的最大領頭區段,再套用模數。因此每個被接受的序數都擁有相同數量的底層 32 位元值。一個有界的安全防護會在數值持續落入被拒絕的尾段時回報隨機來源失敗。
工具強制執行的驗證規則
嚴格的驗證是此產生器較為有用的特性之一,因為它在任何抽取發生之前,會強制讓輸入描述真實的日曆日。能抓到最多打字錯誤的兩個檢查是閏日處理與月份溢位。
- 閏日遵循 Gregorian 規則:2000-02-29 有效,因為該年可被 400 整除;2024-02-29 有效,因為該年可被 4 整除且不是世紀年;1900-02-29 會被拒絕,因為 1900 是世紀年且不可被 400 整除;2023-02-29 會被拒絕,因為該年不可被 4 整除。
- 月份與日期的溢位同樣會被拒絕:像 2025-04-31 這樣的輸入不會被靜默地遞進為 5 月 1 日。同樣地,2025-02-30、2025-13-01 以及其他類似的非法民用日期也一樣。
- 年份範圍為 0001-01-01 到 9999-12-31,因為這是能透過 setUTCFullYear 乾淨往返的範圍。
- 數量範圍為 1 到 1,000。空白數量、小數、零、負值或超過 1,000 的值,都會產生明確的錯誤,說明允許的範圍,並確認並未截斷任何內容。
隨機抽樣日期的常見任務
下表列出幾個均勻抽樣能節省時間的情境。具體抽取取決於所選的範圍與數量,因此請使用產生器取得精確的數字,而非僅憑描述猜測。
| 任務 | 建議範圍 | 數量 | 重複模式 |
|---|---|---|---|
| 為寫作提示挑選一個日期 | 完整日曆年 | 1 | 任一 |
| 在同一個月內抽樣截止日期 | 該月第一天到最後一天 | 最多為該月天數 | 若每天一個則使用唯一 |
| 壓力測試日期解析器 | 橫跨已知的世紀轉換 | 最多 1,000 | 允許 |
| 在一個季度內挑選審查日期 | 該季初到該季末 | 3 到 10 | 允許 |
| 排程 N 個項目而不重疊 | 至少涵蓋 N 天的範圍 | N | 唯一 |
重複模式與唯一模式
同一個日期在小樣本中出現兩次,有時是想要的(像是獨立的彩券式抽籤),有時則不希望(像是分派審查日期時重疊會很尷尬)。產生器透過單一開關同時處理這兩種情況。當允許重複時,每次請求的抽取都會獨立地從完整包含式範圍中抽樣,因此同一日期可能合理地出現多次。當停用重複時,工具會執行稀疏的部分 Fisher-Yates 不放回抽樣:在每一步中,每個合格的日期仍保持均勻可選,已選取的位置會被移除,且記憶體隨請求的數量成長,而非隨著多達數百萬天的範圍成長。唯一模式會在數量大於可用日期數時予以拒絕,而非回傳較少的日期或悄悄啟用重複。編輯任一端點、數量或重複開關,都會清除先前的清單與任何先前的錯誤,因此畫面上的輸出永遠反映目前的設定。
此工具無法取代的事物
隨機日期對測試固定資料、寫作提示、範例排程、隨機練習與展示很有用,但它無法取代已對特定約束進行編碼的系統。此清單不會排除週末、國定假日、歷史曆法轉換、無法預訂的日子,或組織特定的封鎖日期。在真實流程中使用日期之前,請另外檢查這些約束。輸出並非預測、預約服務、法律期限計算機、工作日曆、假日曆、時區轉換器或時間戳記產生器。除了內部 UTC 序數方法之外,日期不含時段或時區偏移。針對可重現的軟體測試,請儲存產生的日期,或使用您自己的種子式測試產生器;Web Crypto 在此介面中刻意不支援設定種子。若抽取涉及財務、法律、競賽、安全或稽核後果,請採用具備獨立監督與留存證據的文件化程序。此瀏覽器工具提供的是為一般實用工作所做的縝密無偏抽樣,而非經認證的隨機抽獎服務。
若您正在權衡選項,假 IP 產生器:來自 RFC 範圍的安全範例位址對此有詳細說明。
若您正在權衡選項,如何在 Excel 中不使用公式產生隨機字母對此有詳細說明。