日期清單產生器命令列工具是一個小型腳本,您在終端機中安裝並執行它,以便列印出兩個端點之間的所有日期;而線上日期清單產生器則是在瀏覽器分頁中執行相同的工作,無需安裝。兩者都會產生一行一筆的清單,但在設定時間、跨機器的可重現性、時區行為,以及當請求超出結果上限時會發生什麼情況方面,兩者差異極大。「Date List Generator」是線上路徑:它接受嚴格的 YYYY-MM-DD 端點、1–366 天的步進、可選的英文星期標籤,並回傳最多 10,000 個日期的完整序列,沒有抽樣、沒有省略號,也沒有上傳。
人們之所以會比較這兩者,是因為每種工作流程都有各自的痛點。正在編寫測試固件的開發人員可能已經開著一個終端機,只需要一個純文字檔案。內容企劃人員、小型企業經營者,或正在建立排程草稿的學生,通常不想安裝 Python、管理虛擬環境,或排查一個會默默改寫不可能日期的解析器。要選對路徑,得先了解每種方法實際上做了什麼。

命令列日期清單工具實際上在做什麼
命令列日期清單產生器是一個您從終端機執行的小程式。GitHub 上的儲存庫,例如 makedatelist、datelistinator 和 Chronogen,都遵循相同的形式:您傳入兩個日期與一個間隔,腳本就會把一行一個日期的結果寫到標準輸出或寫入檔案。這些腳本大多依賴主機作業系統的日期函式庫,這表示如果機器被設定為以不同方式解析日期的區域,或腳本是透過 Unix 時間戳記進行轉換,輸出就可能會偏移。
權衡是可以預期的。優點方面,命令列工具有可編寫腳本的特性,可以接入 shell 管線,並在安裝後無需網路連線就能產生輸出。缺點方面,您要承擔安裝、版本漂移、地區設定,以及主機日期函式庫那種默默進行標準化的陷阱,包括某些解析器會在沒有任何警告的情況下,把 4 月 31 日往前推到 5 月 1 日這種眾所周知的行為。要在同事的筆記型電腦上重現完全相同的輸出,通常需要釘選語言執行環境、日期函式庫版本以及地區環境變數。
線上日期清單產生器有什麼不同
線上日期清單產生器把同樣的邏輯搬進瀏覽器。沒有執行環境要安裝,沒有 PATH 要更新,也沒有地區要設定。Date List Generator 在當前分頁中執行每一步:解析端點、依據每個月的實際天數進行驗證、計算結果數量、建立序列,並把清單渲染成一行一筆、可直接複製的結果。
由於邏輯是固定在程式碼中,而不是由您自行維護的腳本,所以在任何開啟該頁面的裝置上,輸出都完全一致。這個工具使用的是 proleptic Gregorian calendar(預先推算的格里高利曆),這與 HTML 日期值 以及 RFC 3339 時間戳記 所使用的曆法模型相同,因此在您和結果之間,沒有午夜、UTC 偏移、夏令時間轉換,或依地區而異的解析器。這項差異可以避免當瀏覽器在另一個時區執行時,日期向前或向後移動,這對任何經過 Unix epoch 的工具來說都是真實存在的風險。
並排比較:命令列 vs. 線上
下表比較了挑選某一種方法時真正重要的實際面向。為了方便說明,投入心力與準確度之間的關係以質性方式描述,因為精確的輸出取決於您給任一工具的輸入。
| 面向 | 命令列日期清單工具 | 線上日期清單產生器(Date List Generator) |
|---|---|---|
| 設定 | 安裝執行環境、clone 或 pip-install 套件、管理版本 | 開啟頁面即可;無需設定環境 |
| 輸入格式 | 因腳本而異;依地區而解析的情況很常見 | 嚴格的 YYYY-MM-DD,西元年為四位數 0001–9999 |
| 時區處理 | 通常會經過主機的時間戳記函式庫;可能會漂移 | 無時區的 proleptic Gregorian calendar;在任何時區皆一致 |
| 星期標籤 | 可透過額外旗標或腳本達成 | 可選的英文標籤,以 Monday 作為第一個 ISO 星期 |
| 結果上限 | 通常無上限;可能不小心產生巨大的檔案 | 硬性上限為 10,000 列;在輸出前先計算數量 |
| 可重現性 | 取決於釘選的執行環境與地區設定 | 相同程式碼、相同輸入,在任何裝置上輸出皆相同 |
| 篩選(週末、假日) | 可將輸出透過另一個工具以管線方式處理 | 未內建;請另外篩選複製出來的文字 |
| 網路需求 | 安裝後無需網路 | 頁面載入後無需網路 |
三步驟在線上產生日期清單
- 選擇端點。以嚴格的 YYYY-MM-DD 格式輸入起始日期與結束日期。結束日期必須等於或晚於起始日期;由大到小的範圍會被拒絕。支援的年份從 0001 到 9999,且驗證器遵循每個月的實際天數,因此 2000-02-29 會被接受,而 1900-02-29 則不會。
- 設定天數步進。輸入介於 1 與 366 之間的整數天數步進。步進為 1 會列出每個符合資格的日期,7 會建立每週序列,更大的值則會建立以天為單位的一般自訂間隔。可在同一行加入選填的英文星期名稱;加入它們只會改變顯示的文字,不會改變序列。
- 產生,然後複製。按下產生按鈕以建立完整的一行一筆清單。摘要會說明所選步進是否恰好落在結束日期上,因為只有在這種情況下結束才會出現。把文字複製到您的試算表、排程草稿、測試固件或內容企劃中。
兩種方法各自適合的情境
當您已經離不開終端機、輸出會餵給同一條管線中的另一支腳本,而且您能掌控執行環境時,請使用命令列工具。例如,正在建立完整日期字典的滲透測試人員,或是在較大型建置流程中產生固件的 QA 工程師,都會受益於可編寫腳本的 shell 整合。對於必須在另一台筆記型電腦上重現結果的團隊而言,這項好處會被釘選語言與日期函式庫的成本所抵消。
當您想要乾淨的答案且完全不需要設定、清單最終會放進試算表或文件,以及比起腳本深度更重視跨團隊成員的可重現性時,請使用線上日期清單產生器。當日期本身較為敏感時,Date List Generator 也是更安全的選擇,因為每一次解析、計數、星期計算、格式化與複製,全都發生在當前的瀏覽器分頁中,且沒有任何範圍會被這個小工具上傳或儲存。若需要更深入的輸入指引,Date List Generator 速查表 與這個工作流程搭配使用,作為快速參考相當合適。
兩種方法皆適用的輸入規則
有幾條規則無論您選哪條路徑都適用,因為它們描述的是曆法本身,而不是工具本身。年份能被 4 整除者為閏年,除非它也能被 100 整除;能被 400 整除的年份仍然為閏年。因此平年的 2 月有 28 天,閏年則有 29 天。步進是以整數天數計算,而不是以月或年計算,這就是為什麼 1 月 30 日搭配兩天的步進,會產生 1 月 30 日、2 月 1 日、2 月 3 日,依此類推,而不是直接對齊到月份邊界。七天的步進會保留星期,因為一週就是七個連續的曆法日;無法整除整個範圍的步進,會在到達結束之前停下來,這就是為什麼工具的摘要一定會報告步進是否恰好落在所要求的結束日期上。
結果上限同樣值得留意。在產生任何輸出之前,Date List Generator 會把每個有效的端點轉成整數的日序數,並使用 floor((endOrdinal − startOrdinal) / step) + 1 來計算精確的結果數量。請求 10,001 筆或更多日期會失敗,並附上計算出來的數量,且不會回傳部分清單。這個工具絕不會只保留第一頁、插入省略號、略過週末、移除假日、抽樣列數,或推測工作日。如果您的工作流程需要工作日篩選、地區假日,或像是「每月第二個週二」這類週期規則,請在複製清單之後再套用這些規則,因為這個產生器不是約會排程器、假日曆或週期引擎。
單一完整範例能展示數量是如何得出的。以起始 2024-01-01、結束 2024-01-31、步進 7 為例,兩個日序數之間的差為 30 天。把 30 除以 7 得到 4.28,向下取整為 4,加 1 後得到 5 個日期,分別是 2024-01-01、2024-01-08、2024-01-15、2024-01-22 與 2024-01-29。結束的 2024-01-31 並沒有出現,因為步進沒有落在它上面,而摘要正是如此回報的。這 5 個日期的序列、數量與星期標籤,在任何裝置上都會一致,因為計算是以整數日序數而非時間戳記來進行。
延伸閱讀:如何在 Excel 中製作多條折線的折線圖。