大量日期清單產生器會使用所選的整數天數間隔,列印兩個嚴格端點之間的每一個日期,並將完整序列以純文字形式回傳,而非樣本、摘錄或截斷的頁面。日期清單產生器遵循該合約,接受 YYYY-MM-DD 格式的輸入,間隔為 1 到 366,在產生任何文字之前先計算精確的行數,並在沒有部分輸出的情況下,拒絕超過 10,000 行的請求。每一項計算都在當前的瀏覽器分頁中,以無時區的普羅萊普提克格里曆執行,該曆法與 WHATWG HTML 標準中日期值以及 IETF RFC 3339 中日期時間字串所使用的曆法模型相同。在這些規則之下,相同的兩個端點與相同的間隔永遠會回傳相同數量的行數,而且日期絕不會因為裝置位於其他時區而向前或向後偏移。

date list generator bulk
大量日期清單產生器:建立 10,000 個精確日期

此處「大量」的真正意涵

此情境中的「大量」一詞有其特定意義:完整、具確定性且透明。每一個符合資格的日期都會依序從第一行列印到最後一行,沒有靜默省略、沒有跳過週末、也沒有推斷假日或工作日。該工具並不提供讀者有時在其他「大量」產生器中期待的那些便利功能,例如隱含的週一至週五篩選、從龐大資料池中悄悄取樣一千行,或在清單中間以省略號顯示「僅顯示前 N 項,共 M 項」的軟性上限。

那份嚴格性正是重點所在。當目的端系統將每一行視為真實的行事曆項目——日記中的過帳日、薪資批次中的一列、回歸測試中的測資、內容行事曆中的佔位項目——大量日期清單才會變得有用。取樣、工作日推斷與部分輸出都會在來源與目的端之間引入難以察覺的差異。在格式化前先行固定行數,可讓合約保持可稽核性,使目的端永遠不會看到無法解釋的落差。

必要輸入與行事曆驗證

產生器接受兩個端點與一個間隔。每個端點必須採用嚴格的 YYYY-MM-DD 格式,且四位數的年份介於 0001 至 9999 之間。起始日期必須等於或早於結束日期;反向的範圍會在任何輸出產生之前遭到拒絕。間隔必須是介於 1 到 366 之間的整數日曆天數,並從原始起始日開始往後套用,而不是反覆進位至月份邊界。

日期驗證遵循每個月份的真實長度。能被四整除的年份為閏年,除非它能被一百整除;能被四百整除的年份仍然為閏年。因此 2000-02-29 為有效日期,而 1900-02-29 並非有效日期。無效的月份數字、不可能存在的日期,以及不完整的欄位會直接遭到拒絕;該工具絕不會讓瀏覽器悄悄地將不可能的日期(例如 4 月 31 日)進位為 5 月 1 日。選用的英文星期名稱以星期一為一週的第一天,並從用於格式化日期的同一序數推導而來,因此每一列的星期標籤絕不會與其所附的日期脫鉤。

逐步建立大量日期清單

  1. 開啟日期清單產生器,以嚴格的 YYYY-MM-DD 格式輸入起始日期。
  2. 挑選一個等於或晚於起始日的結束日期,選擇一個能符合您希望維持在內的列數預算的大致範圍。
  3. 輸入介於 1 到 366 之間的整數日間隔。間隔為 1 會列出範圍內每個符合資格的日期,7 會建立保留星期幾的每週節奏,而較大的數值則可建立您所需的任何固定區間。
  4. 若您希望在每列旁顯示星期一至星期日,請勾選星期名稱選項。由於這些名稱是固定的英文字串而非經過本地化的瀏覽器文字,標籤在所有裝置上都會保持為純文字。
  5. 按下「產生」。該工具會驗證端點、計算精確的行數、獨立地格式化每個日期與選擇性的星期幾,並回報所選的間隔是否恰好落在結束日期上。
  6. 使用複製按鈕複製結果,或在剪貼簿權限被拒時手動選取唯讀文字區域。每一行就是一個日期,將其貼入試算表時,每個項目會各自佔據一列。

實作範例:橫跨一月底與二月初的四列

以起始日 2024-01-30、間隔 2、結束日 2024-02-05 為例,兩個端點之間的序數差為六個日曆天,因此精確的行數為 floor(6 ÷ 2) + 1 = 4。預期的序列為 2024-01-30、2024-02-01、2024-02-03 以及 2024-02-05。間隔恰好落在結束日期上,因此結果摘要會回報為包含結束日。

另外有兩項相關的檢查會隨著範例一併說明。第一,由於 2024 年是閏年(可被 4 整除,但不可被 100 與 400 整除),二月有 29 天,該序列跨越了一月至二月的邊界而無需任何特殊處理。第二,每一列的星期幾是從產生該日期的同一個序數推導而來,因此在開啟星期名稱時,2024-02-05 會帶有星期一的標籤。請於工具中確認精確的星期幾、序數以及相鄰的列,而非依賴記憶來製作正式清單。

大量清單常見的間隔節奏

間隔所產生的節奏典型用途
1範圍內的每一個日期每日紀錄、站會歷史、財務過帳
7相同的星期幾,每週一次衝刺檢視、每週狀態報告、內容行事曆
14相同的星期幾,每兩週一次雙週薪資週期、雙週回顧會議
30自原始起始日起每三十個日曆天長程規劃、留存率檢查點;並非以曆月進行算術
366跨越非閏年的年度間隔年度回顧紀念日、合規檢查點

特定節奏的精確行數取決於兩個端點與間隔,因此在將該表格視為特定範圍的決定性依據之前,請務必執行產生器以確認其規模。

當大量請求超過 10,000 列時

所接受的最大行數為 10,000。該工具會計算 floor((endOrdinal − startOrdinal) ÷ step) + 1,將結果與預算進行比較,並在產生任何一行輸出之前,拒絕任何結果超過 10,000 的請求。拒絕訊息會回傳計算後的數量,而不是所輸入的範圍,讓您能在選擇不同間隔之前先行確認算術結果。

有三種調整方式能將過大的請求拉回預算之內。在保持相同間隔的情況下縮小範圍、在保持相同範圍的情況下加大間隔,或是將工作拆分為兩個或多個皆低於上限的請求。「拆分」意指為範圍的前半段執行一次產生器,再為後半段執行一次,由於格式與曆法在各次呼叫之間皆保持一致,兩段輸出能夠乾淨地組合。在拆分之後,若兩半都產生共用日期,請於目的端將該邊界列進行去重。

將大量輸出貼至其他地方

輸出為每行一個日期的純文字,因此無需前置處理即可套用至大多數目的端。在 Excel 中,將其貼至 A 欄,並在附加選擇性星期後綴時,透過 Data > Text to Columns 搭配固定分隔符進行處理;如需能與本產生器搭配使用的完整逐步指南,請參閱如何在 Excel 中以精確間隔建立日期清單。在 Google 試算表中,使用 Ctrl+Shift+V 貼上以去除格式,接著若您保留了選擇性的星期名稱,請手動切分任何星期後綴。在 SQL 測試資料中,可將清單儲存為文字檔,並透過批次插入或字串分割陳述式載入。

每次貼上時都伴隨著兩項操作提醒。該清單僅是一連串的日期,因此本身並未內含營業時間、市場交易時段、宗教曆法、學校曆法、地區假日或使用者位置的概念——請在匯入前依目的端系統的規則進行檢視,尤其當涉及到截止日、薪資、差旅、財務或法律義務時更應如此。整個產生流程皆於當前的瀏覽器分頁中執行,該小工具並不會上傳或儲存任何日期範圍;當序列中包含您不希望離開本機的項目時,這一點格外重要。

如需更深入的探討,請參閱使用 Python 在範圍內產生隨機日期