一個以完整格里高曆日運作的日期區間計算工具,會回報從某個指定的過去起始日期到你目前查看日期之間的完整日曆天數,計算方式是將 UTC 午夜時間戳相減,而不是計算經過的小時數。Days Since Counter 正是採用這個規則:你為里程碑取一個簡短名稱,輸入一個早於或等於今天的 YYYY-MM-DD 起始日期,頁面就會回傳一個整數,代表裝置目前當地日期的完整天數。這個結果是日曆式的答案,不是碼表的讀數,所以一個 23 小時的夏令時間日仍算一天,一個 25 小時的春令回撥日也算一天。當你需要以「天」而非「小時」計算某件事時——例如某個專案啟動至今的時間、一個例行作業的存續時間,或一個維護週期已開放多久——這個區別就很重要。顯示的內容一律使用裝置的當地日曆日,也就是儲存快照時所歸檔的那一天,而里程碑名稱、起始日期和快照都只保留在這台裝置上,不會上傳,也不需要帳號。

「日期區間」在日曆日計算中代表什麼
大多數搜尋結果對「日期區間計算工具」的理解,不是將兩個時間戳相減,就是進行日曆感知的加總,然而這兩種其實是不同的任務。時間戳相減是測量以毫秒為單位的經過區間,再除以一天的毫秒數,這個方式只有在跨過的每一天都剛好是 24 小時時才正確。日曆感知的相減則是計算兩個日期之間日曆跨越午夜的次數,這種方式適合像「自從裝潢開工以來」這類有標籤的事件,但會忽略每一天內的時鐘小時數。
Days Since Counter 是為第二種任務而設計的。它的計算會將你輸入的年、月、日元件轉成 Date.UTC(year, month - 1, day) 值,再將所得的整數日數相減。使用 UTC(依據 ECMA-262 規範所定義)可讓運算不受當地夏令時間規則影響,所以 23 小時的一天與 25 小時的一天都恰好貢獻一天。接著將顯示的值附加到裝置的當地日曆日,也就是儲存快照時所歸檔的那一天。
如何計算某個過去事件以來的日曆天數
開啟 Days Since Counter,在里程碑欄位輸入一個簡短名稱,選擇一個過去或當下的 YYYY-MM-DD 值作為起始日期,然後儲存。頁面會驗證四位數年份是否落在 1900 到 9999 之間,檢查月份是否為 01 到 12,以及日期在該月份是否有效,套用格里高曆閏年規則,接著計算整數日結果。第一次儲存時,也會為今天建立第一筆快照。從此之後,每次造訪的操作流程都一樣:
- 輸入一個簡短的里程碑名稱(例如「Office Move」或「Sleep Tracker Reset」),讓這筆帶日期的紀錄在瀏覽器之外也有脈絡。
- 在日期欄位選擇一個當天或更早的 YYYY-MM-DD 起始日期;此工具會拒絕未來的日期,而不是變成倒數計時器。
- 儲存起始日期。頁面現在會顯示該起始日期與本機今天之間的完整格里高曆天數。
- 每當你想留一份帶日期的本地紀錄時,請使用「儲存今日快照」。已儲存的快照在里程碑當天開始時可顯示零天,這是真實的日曆結果,並會保留在歷史清單中。
- 下次造訪時,回到同一個里程碑,再按一次「儲存今日快照」,即可歸檔另一筆比前一筆高一個日曆日的紀錄。
- 當你需要瀏覽器以外的檔案時,可將歷史匯出為 PNG(1080 乘 1350 的摘要圖,不含你的自訂里程碑名稱與任何網址)或 CSV,欄位包含 Snapshot date、Start date 與 Days since。
為什麼 UTC 午夜在閏日前後很重要
若日曆日計算工具切換到當地時間,可能會悄悄地把單一天回報為 23 或 25 小時,接著把這個差距壓成零個完整日,或重複計算成兩天。Days Since Counter 透過將你輸入的年、月、日轉為 UTC 午夜,再將所得的整數日數相減,來避免這個問題。同一個 UTC 步驟也讓格里高曆閏年規則得以判斷 2 月 29 日是否存在,因為此工具只計算完整日,並讓標準規則決定那一天是否缺失。
根據美國海軍天文台所公布的閏年規則本身很簡短:能被四整除的年份是閏年,但世紀年例外,除非該世紀年也能被 400 整除。以 2024-02-28 作為起始日期,在 2024-03-01 讀取計數器。由於 2024 能被四整除且不是世紀年,因此 2 月 29 日存在,整數日差為兩天:Date.UTC(2024, 2, 1) - Date.UTC(2024, 1, 28) 等於 2 × 86,400,000 毫秒,換算後為 2 個完整日。將同一個測試往前推一年:2023-02-28 到 2023-03-01 回傳一天,因為 2023 不能被四整除,二月只有 28 天。算術過程完全相同,改變的只有起始年份的閏年狀態。
保留帶日期的本地歷史而不予覆寫
儲存起始日期時,已經會為你查看的當天建立第一筆快照,之後每按一次「儲存今日快照」,就會在本地歷史中新增另一筆帶日期的紀錄。這份歷史屬於單一起始日期,因為若在已有快照之後變更起始日期,會悄悄改寫較舊紀錄的意義。為避免這種情況,此工具會要求你在更換已有快照的起始日期前先清除本地歷史;較舊的紀錄會從這個瀏覽器中移除,然後在下一次儲存時開始一份全新的帶日期紀錄。
零天的快照並不是空白的計數,而是里程碑開始當天的真實日曆結果,歷史清單會將其保留下來,讓紀錄看起來不會晚一天才開始。如果你想要一個標記為多年前已結束的里程碑資料列,請將起始日期設為實際開始的那一天,讀取計數,並立即儲存快照;明天再回來按「儲存今日快照」會新增一個高一天的紀錄,而不是重新讀取原本的差距。
何時該改用其他工具
當問題是「自從某個指定的過去日期以來,已經過了多少個完整日曆天」,而且答案應該在這台裝置上明天、下週或明年都讀得到時,Days Since Counter 就是正確的選擇。其他生產力工具回答的是不同問題,而選錯工具通常意味著之後得重寫工作流程。下表將每個工具與它實際回答的問題配對,讓選擇先看問題、再看工具。
| 你想回答的問題 | 最佳工具 | 為什麼這個工具合適 |
|---|---|---|
| 自從某個指定的過去日期以來,已經過了多少個完整格里高曆日? | Days Since Counter | 計算整數 UTC 日數差,儲存帶日期的快照,並可從本地瀏覽器資料匯出 PNG 或 CSV。 |
| 某個事件實際已執行多久? | Online Stopwatch | 即時正數計時,提供分段計次,適用於可隨停止而重設的經過時間。 |
| 某件事在這台裝置上發生過幾次? | Online Tally Counter | 以手動方式累加,適用於重複的個別事件,而非完整日曆天數。 |
| 距離某個特定未來時刻還有多久? | Online Countdown Timer | 倒數至指定的時、分、秒目標值,而不是從過去日期開始計算。 |
| 每段 Pomodoro 專注與休息各有多長? | Pomodoro Timer | 執行標準的 25/5/15 循環,自動切換階段,並計算已完成的階段數。 |
如果里程碑是未來事件,例如上架日期或截止日,Days Since Counter 會直接拒絕未來的 YYYY-MM-DD 值,而不是把自己變成倒數計時器。當工作同時包含等待期與「自從開始以來」的紀錄時,可以兩者搭配使用:以 Online Countdown Timer 處理倒數階段,事件真正發生後再切換到 Days Since Counter。
預期會遇到的限制與儲存行為
Days Since Counter 僅接受 YYYY-MM-DD 格式、1900 到 9999 之間的當天或更早日期,並在顯示計數前驗證月份天數與格里高曆閏年規則。未來的值會被拒絕,而不是悄悄轉成倒數計時器;零天的快照會顯示為零,而不是被隱藏。歷史清單只會儲存在本機瀏覽器的 counter:days-since-counter 之下;清除本網站的瀏覽器資料會一併移除里程碑名稱、起始日期與所有快照,第二個瀏覽器則會以空白計數器開始。若瀏覽器儲存空間無法使用,顯示的計算仍可運作,頁面會告訴你無法保留快照。PNG 與 CSV 匯出是直接在瀏覽器中透過原生 canvas 與 Blob API 產生,此工具不涉及上傳佇列、伺服器端日期服務或帳號。
若想進一步了解,請參閱 Can You Set a Future Start Date in Days Since Counter?。
若想進一步了解,請參閱 Days Since Counter: Calendar Days vs 24-Hour Periods。