計算兩個日期之間的天數時,先確認要的是經過幾天,還是首尾日期都算入的日數。例如 10 月 7 日到 10 月 14 日相差 7 天;若把 7 日和 14 日都列入計數,則涵蓋 8 個日曆日期。本文以公曆日期為例,適用於行程、倒數、期間和一般日程估算;合約、退費或法定期限仍以適用規則的起算方式為準。

照片:Dafne Cholet;CC BY 2.0,Wikimedia Commons 原始檔案頁。
日期加減與天數計算快速方法表
| 要計算 | 快速方法 | 例子 | 結果與提醒 |
|---|---|---|---|
| 兩日期經過天數 | 結束日期 − 開始日期 | 2026-10-14 − 2026-10-07 | 7 天;不把起始日重複算入 |
| 首尾日期都計入的日數 | 結束日期 − 開始日期 + 1 | 2026-10-07 至 2026-10-14 | 8 個日曆日期 |
| 日期往後加 N 天 | 從該日期往後數 N 次日界線 | 2026-10-07 + 10 天 | 2026-10-17;起始日不算經過日 |
| 日期往前減 N 天 | 從該日期往前數 N 次日界線 | 2026-10-07 − 10 天 | 2026-09-27 |
| 週數換成日數 | 週數 × 7 | 6 週 × 7 | 42 天 |
| 日數換成整週與餘日 | 日數 ÷ 7,取商和餘數 | 17 天 = 2 × 7 + 3 | 2 週 3 天 |
| 日期加一個月 | 移到下一個日曆月;若沒有同一日,按指定月底規則處理 | 1 月 31 日 + 1 個月 | 依規則可能落在 2 月底;不是固定加 30 天 |
| 工作日數 | 排除指定休息日及所在地假日 | 週一至週五制,排除週末 | 假日因地區及年份而異,沒有全球通用結果 |
先決定計數口徑:「10 月 7 日起算 7 天」可能指 10 月 14 日到期(經過 7 天),也可能指 10 月 13 日是第 7 個日期(把 7 日列為第 1 天)。需要精確執行時,寫明起始日、截止日,以及首日是否計入。
公曆每月日數與閏年速查
| 月份 | 平年日數 | 閏年日數 |
|---|---|---|
| 1 月 | 31 | 31 |
| 2 月 | 28 | 29 |
| 3 月 | 31 | 31 |
| 4 月 | 30 | 30 |
| 5 月 | 31 | 31 |
| 6 月 | 30 | 30 |
| 7 月 | 31 | 31 |
| 8 月 | 31 | 31 |
| 9 月 | 30 | 30 |
| 10 月 | 31 | 31 |
| 11 月 | 30 | 30 |
| 12 月 | 31 | 31 |
公曆閏年判斷:年份能被 4 整除通常是閏年;整百年須能被 400 整除才是閏年。因此 2000 年是閏年,1900 和 2100 年不是。美國海軍天文台的曆法說明列出此規則。閏日是 2 月 29 日;跨年期間若包含閏日,日期相減會多計一天。
日期相減例子:區分經過日數和日曆日期數
跨月倒數
2026-02-27 到 2026-03-02:2 月 27 日到 28 日為 1 天、28 日到 3 月 1 日為 1 天、3 月 1 日到 2 日為 1 天,所以經過 3 天。若把 2 月 27 日、28 日、3 月 1 日和 2 日都列入日程,則共有 4 個日曆日期。
期間含首尾日
住宿日期寫 10 月 7 日入住、10 月 14 日退房,通常是 7 晚,不是 8 晚;若問「包含 7 日和 14 日的日期共有幾天」,答案則是 8 個日期。業務用語有各自慣例,計算前應確認欄位指的是夜數、經過日數或含首尾的日數。
月份與年份不能一律換成固定天數
| 說法 | 可靠的處理方式 | 為什麼不能簡單換算 |
|---|---|---|
| 1 個月 | 移到下一個日曆月,先定義目標月沒有同一日時如何處理 | 各月長度有 28、29、30、31 天;「一個月」不是固定 30 天 |
| 月底加 1 個月 | 按服務或軟體定義,例如將日期調整到目標月最後一日 | 1 月 31 日加一月可能得到 2 月 28/29 日;不同系統的月份溢位規則可能不同 |
| 1 年 | 按日曆年份推進,先定義 2 月 29 日遇平年時的對應日 | 平年 365 天、閏年 366 天 |
| 30 天 | 直接增加 30 個日曆日 | 不等於一個日曆月,也不等於每月帳單週期 |
| 365 天 | 直接增加 365 個日曆日 | 跨過 2 月 29 日時,日曆日期與「一年後」可能不同 |
若系統或條款使用「一個月」、「月底」、「周年」、「每 30 日」等字眼,不要自行互換。日期差值和固定天數是不同操作;程式或服務的月份加法也可能採不同月底處理規則,應查該工具的定義。Python datetime 官方文件可作為日期差值與固定時長運算的參考。
日期與時間的差別:跨夏令時間時不一定是 24 小時
若只計算兩個公曆日期標籤的日數,使用日曆日期相減即可。若計算兩個當地時間點經過幾小時,先確認時區並換到同一基準;跨越夏令時間切換時,當地鐘面的一個日曆日可能只有 23 或 25 小時。日期格式、UTC offset、地區時區和夏令時間的處理見日期時間格式、UTC 時差與時區判讀。RFC 3339 時間戳記中的 offset 表示特定時間點相對 UTC 的差值,不會單獨描述未來整套地區時區規則。RFC 3339
常見日期計算錯誤
- 先把起始日算作第 1 天:日期相減的經過日數通常不包含起始日當天。
- 把一個月當 30 天:如需日曆月,按月份和月底規則計算;如需固定 30 日,明確寫「30 天」。
- 忽略閏年:跨越 2 月的日期區間應按實際公曆計算,不能每年都套 365 天。
- 用週末代替工作日假期:工作日計算必須指定工作週、假日所在地和年份。
- 直接比較不同時區的當地時間字串:先換成同一時區或時間基準,否則時刻先後和經過時間可能算錯。
日期格式與其他換算
跨系統傳遞日期時,建議使用年份在前的 YYYY-MM-DD 形式降低月/日順序歧義;只有日期時不要自行補上時刻或時區。完整日期、週日期、區間和時長的表示法見ISO 8601 日期時間格式完整對照。Unix 秒或毫秒時間戳記的換算見Unix 時間戳記秒、毫秒、微秒、奈秒與其他時間基準。
來源與適用範圍
- U.S. Naval Observatory:Introduction to Calendars:公曆與曆法基礎說明。
- U.S. Naval Observatory:Leap Years:公曆閏年規則及閏日說明。
- Python 官方文件:
datetime— Basic date and time types:日期、時間差值和固定時長運算的程式介面參考。 - IETF RFC 3339:Date and Time on the Internet:網路時間戳記格式、日期時間與 UTC offset 表示。
本文以公曆日期的日常計算為範圍,不涵蓋宗教曆、財務日數慣例、司法期限或特定地區的工作日規則。涉及合約、法定期限、帳單週期或跨時區排程時,依適用條款、當地規則及系統文件確認起算方式。查核日期:2026-10-07。
資料記錄