SoupCalc

日期計算機:以 ISO 8601 精確度計算時間間隔、增減日期


日期計算機的運作原理

日期計算機回答兩個基本問題:兩個時刻之間相隔多久,以及當你將已知日期加上一段固定間隔後會得到什麼時刻。在底層,這兩種操作共享同一套嚴謹的方法:使用 ISO 8601 標準將日期解析為明確的瞬間,在協調世界時中進行算術運算,並以使用者要求的精細度呈現結果。

此工具接受一個開始日期和一個結束日期,計算兩者之間經過的時間長度,並將該時間長度表示為完整天數加上剩餘的小時、分鐘和秒。它也可以接受單一日期和一個整數偏移量(正數或負數),並在加上或減去指定的年、月或天數後返回結果日期。兩種模式都建立在相同的嚴格基礎上,因此輸出結果具有確定性和可重複性。

理解 ISO 8601 輸入解析

每個進入計算機的日期都必須符合 ISO 8601 合併日期時間格式:YYYY-MM-DDTHH:MM:SS。T 分隔符將日曆日期與牆鐘時間元件區分開來,所有時間在解析後立即被視為 UTC。沒有隱含的本地時區、沒有日光節約調整,也沒有模稜兩可的小時。如果使用者提供部分時間戳——例如,只有日期而沒有時間——工具會將其視為該日的 UTC 午夜(T00:00:00)。

不符合 ISO 8601 模式的輸入會被直接拒絕。同樣的嚴格性也適用於日期順序:如果結束日期早於開始日期,計算不會產生負的時間長度。相反,工具會將該輸入視為無效並停止,防止使用者依賴一個難以解釋的結果。這種拒絕反序輸入的政策保持了輸出空間的乾淨:每個返回的時間長度都是一個正的時間跨度。

時間長度計算:天、小時、分鐘和秒

當工具計算兩個時間戳之間經過的時間時,它首先從結束瞬間的 Unix 紀元秒數中減去開始瞬間的 Unix 紀元秒數。得到的整數代表總經過秒數。從這個單一數值,計算機推導出使用者看到的每個組成部分:

  • 完整天數是總秒數除以 86,400(一個標準 UTC 日的秒數)的整數商。餘數則填入小時、分鐘和秒的欄位。
  • 總小時數是總秒數除以 3,600,向下取整。這不是「扣除天數後剩餘的小時數」,而是整個時間跨度以小時表示的總和。
  • 總分鐘數和總秒數遵循相同的模式:將原始秒數分別除以 60 和 1,向下取整。

這種向下取整的設計意味著,在總量級別檢視中,90,123 秒的時間長度不會顯示為「1 天 1 小時 2 分鐘 3 秒」。相反,總小時數顯示為 25 小時,總分鐘數顯示為 1,502 分鐘,總秒數顯示為 90,123 秒。除了這些累計數字,工具還會同時顯示分解為完整天數加上剩餘小時、分鐘和秒的對應版本,讓使用者可以同時看到兩種視角。

使用月和年偏移的日期算術

增加或減少天數很直接:計算機按確切的秒數偏移底層的 UTC 時間戳。然而,月和年的長度各異,因此工具採用日曆感知的方法。

當使用者對一個日期加上一個月時,工具會遞增月份欄位,同時保留日期值——但有一個關鍵例外。如果目標月份的天數少於原始日期,計算機會將結果箝位到該月的最後一個有效日期。這就是月底箝位。例如,1 月 31 日加上一個月,在閏年會得到 2 月 29 日,否則得到 2 月 28 日。時間部分在整個操作過程中保持不變,因此 2024-01-31T12:00:00 加上一個月變成 2024-02-29T12:00:00。

年份偏移的運作方式相同:遞增年份欄位,保留月份,如果目標日期無效則箝位日期(最常見的情況是在閏年對 2 月 29 日加上一年,結果落在非閏年)。僅支援整數偏移——不支援分數月或分數年,因為對於半個月意味著什麼,並不存在普遍接受的定義。

計算範例

考慮開始日期為 2026-01-01T00:00:00,結束日期為 2026-01-02T01:02:03。計算機計算兩者之間的秒數差:

該時間跨度剛好是 1 天 1 小時 2 分鐘 3 秒。以累計方式表示,則是 25 小時、1,502 分鐘和 90,123 秒。工具將四種精細度並排顯示,讓使用者能同時看到分解檢視(1 個完整天加上剩餘部分)和每個總量級別的數字。

對於日曆算術,以 2024-01-31T12:00:00 加上一個月為例。1 月有 31 天,因此天真的目標會是 2 月 31 日。由於 2024 年是閏年,2 月只有 29 天,工具會將日期箝位到 29 日。時間部分保持不變,仍為中午,得到 2024-02-29T12:00:00。此箝位行為具有確定性,在所有月底邊界情況中保持一致。

精確度與限制

計算機完全在 UTC 中運作,不考慮時區偏移或日光節約轉換。它直接從解析後的 UTC 時間戳推導出時間長度,並報告整秒數,但該結果並不反映經歷日光節約轉換的使用者所體驗到的「牆鐘時間」。如果倫敦的使用者需要知道跨越 DST 變更的兩個時刻之間相隔多少本地時鐘小時,他們必須手動套用該調整。

閏秒未被建模。工具將每個 UTC 日視為恰好 86,400 秒。對於跨越數十年的時間長度,忽略閏秒所累積的誤差可能達到數十秒,這對日曆日期計算而言可以忽略不計,但對高精度科學用途而言則很關鍵。

此工具也不處理 Unix 紀元(1970 年 1 月 1 日)之前或超過 9999 年的日期。超出該範圍的輸入會被拒絕。月底箝位規則已有文檔記錄並一致地套用,但使用者應注意,商業規則有時有所不同——例如,某些金融合約將「1 月 31 日後一個月」定義為每年都是 2 月 28 日,無論是否為閏年。此工具的行為遵循通用的日曆月底慣例,而非任何特定行業標準。

資料來源

ISO 8601 標準規範了日期和時間的表示方式,並構成了工具每個解析決策的基礎。完整規範由國際標準化組織維護。

編輯記錄

本文是為配合日期計算機模組的發布而撰寫的。它反映了截至 2026 年 8 月的實作情況。計算範例已在同一日期根據工具輸出進行驗證,以確保數字與實際計算結果相符。

後續修訂將記錄解析規則、支援的日期範圍或箝位行為的任何變更。如果計算機更新為處理時區感知輸入或建模閏秒,本文將相應修改。 作者:SoupCalc 編輯團隊 最後審閱日期:2026 年 8 月 11 日