日期間隔計算器
計算兩個日期之間的天數、週數、月數、年數等
計算兩個日期之間的間隔
什麼是日期間隔計算器?
日期間隔計算器用來測量兩個日曆日期之間相差多久,並將結果換算成天數、週數、約等於幾個月、約等於幾年,以及小時、分鐘等單位。它適合核對專案週期、請假區間、帳期跨度、紀念日、資料儲存期限與歷史日期距離。要注意,日期間隔不一定等於「包含首尾兩天」的天數:例如 1 月 1 日到 1 月 3 日相差 2 天,除非業務規則要求兩端都算入。月份與年份通常只能近似,因為每個月長度不同。若涉及工作日、假日、時區或法律截止日,應依相應規則另行計算。
使用方法
使用說明
- 輸入開始日期
- 輸入結束日期
- 點選「計算間隔」以比較兩個日期
- 查看結果:天、週、月、年、時、分、秒
計算規則
- 請確認您的任務需要的是排除端點的間隔,還是包含端點的計算;許多業務規則會將起訖日一併納入。
- 處理跨時區工作時,請先將日期轉換為同一時區,特別是時數或分鐘數有影響的情況。
使用場景
技術原理
精確天數差異透過 Math.floor((end.getTime() - start.getTime()) / 86_400_000) 計算,其中 86,400,000 是非夏令日 24 小時的毫秒數。這給出的是開區間結果——1 月 1 日到 1 月 3 日為 2 天而非 3 天——因為減法測量的是兩個時刻之間的跨度而非計算日曆格數。若需包含首尾兩端(兩端都計入),結果加 1;許多法律、請假和計費規則要求如此,偏移一是人力資源與財務報告之間最常見的分歧原因。週數即天數 / 7;頁面同時顯示小時 = 天數 * 24、分鐘 = 天數 * 1440、秒 = 天數 * 86,400 的衍生總數。 月份和年份差異刻意標示為「約」,因為日曆月份和年份長度不一。簡單方法是天數 / 30.436875(平均格里曆月份)和天數 / 365.2425(400 年格里曆週期的平均年份),適用於狀態報告和儀表板但不適用於合約。對於日曆精確的「X 個完整月份」,演算法先減去年份 × 12 + 月份分量,若結束日小於起始日則再減 1——這是大多數日期函式庫(date-fns differenceInMonths、dayjs $.diff('month')、Temporal Duration.from)的計算方式。年份計算有相同特性:2024-02-29 到 2025-02-28 有時被計為 1 年(限制至月底),有時為 0 年 11 個月 30 天,取決於慣例。 閏年遵循格里曆規則(能被 4 整除,但世紀年必須能被 400 整除,因此 1900 年 = 平年,2000 年 = 閏年,2024 年 = 閏年)。包含 2 月 29 日的跨度會自動多計一天,因為天數計算基於紀元以來的毫秒數而非日曆欄位。當兩個端點的時間精度低於一天時,時區處理至關重要:從本地時間字串建立的兩個 Date 值相減可能會有本地 UTC 偏移量的誤差,跨越夏令時間轉換的跨度可能是 23 或 25 小時而非標稱的 24 小時。Y2038 問題(Unix time_t 有符號 32 位元溢位於 2038-01-19T03:14:07Z)不會影響此頁面,因為 JavaScript Date 使用 64 位元浮點數,可表示紀元前後約一億天的日期,但以 32 位元 C 撰寫的下游系統仍需留意。
- 精確天數 = Math.floor((end - start) / 86_400_000);每個非夏令日 8640 萬毫秒。
- 結果預設為開區間:1 月 1 日到 1 月 3 日 = 2 天;加 1 即為包含首尾兩端的計數。
- 約等月份使用平均 30.436875 天;年份使用格里曆 400 年週期的 365.2425 天。
- 日曆精確月份差異:(y2-y1)*12 + (m2-m1),若結束日 < 起始日再減 1——與 date-fns differenceInMonths 一致。
- 閏年:能被 4 整除,但世紀年必須能被 400 整除(1900 年否,2000 年是,2024 年是)。
- 夏令時間轉換會產生 23 小時和 25 小時的日曆日;24 小時的減法可能不等於一個日曆日。
- JavaScript Date 為 64 位元浮點數,不受 Unix Y2038(2038-01-19 03:14:07 UTC 的 32 位元 time_t 溢位)影響。
範例
完整兩個年度(2025-01-01 至 2026-12-31)
起始 :2025-01-01
結束 :2026-12-31
天數 :730
週數 :104.29
月數 :~24.00(約略)
年數 :~2.00(約略)
備註 :2028 年是範圍外的下一個閏年,若延伸到該年將涵蓋 2028-02-29。短區間(3 天)
起始 :2026-06-11
結束 :2026-06-14
天數 :3
小時數 :72
分鐘數 :4320
秒數 :259200
含頭尾計算(兩端皆計入):4 天跨年度的專案週期
起始 :2026-01-15(啟動)
結束 :2026-07-20(上線)
天數 :186
週數 :26.57
月數 :~6.16
適用情境 :進度報告、回顧、甘特圖摘要以天數計算年齡
生日 :1995-03-15
今日 :2026-06-11
已活天數 :11,411
年數(約略):31.24
月數 :~374.9
當需要精確天數時很實用(例如紀念日里程碑)時區陷阱(東京 vs 洛杉磯)
同一個日曆日期「2026-07-15」對應不同的真實時刻:
Tokyo (UTC+9) -> 2026-07-15 00:00 = 2026-07-14 15:00 UTC
Los Angeles (UTC-7) -> 2026-07-15 00:00 = 2026-07-15 07:00 UTC
若直接相減差距約 16 小時,足以讓 1 天的結果整個翻轉。
解法:相減前先將兩個日期轉換到同一個時區。常見問題
兩個日期之間的差距是怎麼計算的?
採日曆運算:結果以「年、月、日」呈現,並另外給出總週、日、時、分、秒。年和月以週年為基礎(必須過了相同月日才會增加一年),天數則是兩個日期之間的日曆天數。
為什麼「年 + 月 + 日」加總起來不等於總天數?
因為一個月有 28 到 31 天。「1 年 2 個月又 5 天」的實際天數,會依其中各月份是 28、29、30 或 31 天而不同。「總天數」欄位採用純日曆運算,是最精確的數字。
起始日當天是計入還是排除?
本頁採排除起始日的演算法 — 同一天的差距顯示為 0 天。如果你需要「包含起始日」的演算法(例如住宿天數),請手動將結果加 1。
會排除週末或假日嗎?
不會。本頁計算每一個日曆天。若需計算工作日差距(跳過週末並可選擇排除假日),請使用「工作日計算器」工具。
為什麼跨越 DST 變更後時間部分看起來怪怪的?
時、分部分採用絕對時間,所以跨越日光節約時間轉換時,時間欄位會多出或少掉一小時。日數本身不受影響,因為日期差距是基於日曆計算的。
可比較的最大日期範圍是多少?
JavaScript Date 涵蓋從 Unix 紀元起 ±100,000,000 天,因此大約 ±271,000 年內的任何歷史或未來日期都能比對。1582 年之前的日期使用回推葛利果曆運算,這與當時實際使用的當地曆法不同。
計算是在本機完成的嗎?
是的。兩個日期與計算結果都留在你的瀏覽器中,不會上傳或記錄任何資料。