ToolAct工具行動

日期加減計算器

從指定日期加減天數、週數、月數、年數

從日期加減天數

什麼是日期加減計算器?

日期加減計算器用來從一個起始日期往前或往後推算目標日期,可依天、週、月、年進行加減。它常用於續約提醒、合約到期、回訪安排、保固期限、專案排程與紀念日推算,避免人工翻日曆時漏算。日期加減看似簡單,真正麻煩的是日曆本身並不規則:每個月天數不同,閏年會影響二月,1 月 31 日加 1 個月也可能沒有對應日期。此工具適合快速得到清楚的日曆結果。它計算的是自然日曆時間,不會自動排除週末、國定假日、補班日或法律條款中的特殊截止規則。

使用方法

使用說明

  1. 輸入開始日期
  2. 選擇「加」(往前)或「減」(往後)
  3. 輸入數值並選擇單位(日/週/月/年)
  4. 點選「計算結果」檢視目標日期

日期計算規則

  • 月份與年份的計算結果可能落在較短的月份;請確認您的業務規則如何處理 1 月 31 日加一個月這類情況。
  • 對於截止日期,請先確認週末、假日或當日截止時間是否會影響最終日期。

使用場景

從已知的起始日期計算截止日選取起始日期,選擇加或減,套用天、週、月或年,產生單一結果日期,用於保固、續約、回訪或交期估算。由於月底進位由瀏覽器的日期工具處理,1 月 31 日加一個月這類邊界情況會自動得出 2 月 28 日或 29 日,無需伺服器端的日曆查詢。
使用快捷偏移量快速規劃常見時段結果出現後,+7、+30、+90 天和 +1、+3 個月、+1 年的快捷按鈕可以快速比較常見的檢視週期,無需重新輸入數值。起始日期和選擇的偏移量都留在頁面內,不會向後端發送請求,因此紀念日、試用期、簽證申請或醫療回診日期都可以在共用或借用的裝置上計算,不會暴露底層輸入。
記住日曆運算不等於工作日規則此工具透過日期工具處理日曆日期和月/年進位,不會考慮假日、週末、公司行事曆或特定司法管轄區的截止規則。將起始日期、偏移量和結果日期一起記錄,以便日後理解計算過程。
重新檢查月底進位如 1 月 31 日加一個月當起始日超過目標月份的天數時,確認計算器如何處理進位,避免訂閱續約和合約週年日悄悄偏移到不同的日期。在將結果用於帳務或人力資源系統之前,先測試 1 月 31 日加一個月(對照 2 月實際天數)或 3 月 31 日減一個月(對照閏年 2 月有 31 天的 February)等邊界情況。
為分散式團隊搭配時區記錄結果將參考日期與明確的時區或 UTC 偏移量一起記錄,因為缺乏上下文的截止日在不同地區的審閱者重新解讀時可能會相差一天。例如,標示為「2026-07-15」的合約結束日期對東京團隊和洛杉磯團隊來說代表截然不同的時刻,因此在日期旁記錄偏移量可以防止跨地區交接時常見的靜默日期偏移。

技術原理

本工具的日期運算基於 ECMAScript Date 物件所實作的格里曆(proleptic Gregorian calendar)。JavaScript 中的月份以 0 為起始索引(1 月為 0,12 月為 11),這是日期程式碼中最常見的偏移一錯誤來源。日期加減很簡單:new Date(d.getTime() + n * 86_400_000)。月份加減則較為複雜,因為月份有 28、29、30 或 31 天:標準寫法 date.setMonth(date.getMonth() + n) 當結果月份比來源日期短時會溢位,因此 1 月 31 日加 1 個月會得到 3 月 3 日而非 2 月 28 日(引擎會將多出的 3 天結轉到 3 月)。本工具透過在 setMonth 之後比較 date.getMonth() 來偵測溢位,必要時將日期限制在目標月份的最後一天,與 moment.js、date-fns 及 Temporal 的 Plain Date.add() 行為一致。 閏年遵循標準格里曆規則:能被 4 整除的年份為閏年,但世紀年必須同時能被 400 整除。因此 1900 年和 2100 年為平年,而 2000 年為閏年,2024 年亦然。當計算跨越 2 月 29 日時這點很重要:2023 年 1 月 29 日加 1 個月再加 1 個月得到 3 月 29 日,但在 2024 年進位會落在 2 月 29 日(有效日期)再得到 3 月 29 日,無需限制日期。1582 年儒略曆轉格里曆的分界點在此被忽略,因為格里曆向前無限延伸規則;1582 年 10 月 15 日之前的日期在技術上雖有時代錯置,但對現代用途仍能正確計算。 時區處理是另一個維度:Date 內部儲存 UTC 時刻,僅在呼叫 .getDate()、.getMonth() 或 .toLocaleString() 時才套用主機系統的 IANA 時區(如 America/New_York、Asia/Shanghai)。兩個陷阱:(1) 從不含 Z 後綴的 ISO 字串("2026-06-10")建立的日期會被解析為 UTC 午夜,但 "2026-06-10T00:00:00" 不含 Z 會被解析為本地時間午夜,同一日期的 getDate() 根據使用者的偏移量可能傳回 9 或 10;(2) 春季夏令時間轉換(跳過 02:00-03:00)和秋季(重複 01:00-02:00)使某些運算產生歧義,因此「+24 小時」的加法可能落在實際時鐘的 23 或 25 小時之後。對於工作日、僅限平日或考慮假日的運算,此處的日曆結果必須對照特定地區的假日清單進行後處理(例如透過 date-holidays npm 套件或自訂行事曆),而非依賴簡單的進位。

  • JS Date 月份以 0 為索引:1 月 = 0,12 月 = 11;偏移一是最常見的錯誤。
  • setMonth 溢位:1 月 31 日加 1 個月得到 3 月 3 日而非 2 月 28 日;本工具透過在 setMonth 後比較 getMonth() 來限制至月底。
  • 閏年:能被 4 整除,但世紀年必須能被 400 整除(因此 1900 年否,2000 年是,2024 年是)。
  • 不含 Z 的 ISO 8601("2026-06-10T00:00:00")解析為本地時間;含 Z 則為 UTC——getDate() 可能傳回不同日期。
  • 夏令時間轉換會產生 23 小時和 25 小時的日子;+24 小時不等於 +1 個日曆日。
  • 天數運算透過 getTime() + n * 86_400_000 精確計算;較長單位透過 setMonth/setFullYear 級聯並限制日期。
  • 工作日和假日感知運算必須透過特定地區的行事曆表在上層疊加——不在引擎本身。

範例

起始日加 90 天(試用期 / OKR 檢視)

起始日期 :2026-01-15(星期四)
操作      :+ 90 天
結果      :2026-04-15(星期三)
適用情境 :90 天試用期結束、Q1 OKR 檢視

今日往前推 6 個月

起始日期 :2026-06-11
操作      :- 6 個月
結果      :2025-12-11
適用情境 :回溯半年作續約或流失分析

加 2 年 3 個月 5 天(簽證到期)

起始日期 :2026-01-15
步驟 1 :+ 2 年    -> 2028-01-15
步驟 2 :+ 3 個月  -> 2028-04-15
步驟 3 :+ 5 天    -> 2028-04-20
結果      :2028-04-20

月底進位:1 月 31 日加 1 個月

起始日期 :2026-01-31
操作      :+ 1 個月
結果      :2026-02-28(2026 年 2 月只有 28 天)

閏年檢查:
起始日期 :2028-01-31
操作      :+ 1 個月
結果      :2028-02-29(2028 年是閏年)

提前 14 天的帳單提醒

訂閱續約日 :2026-07-01
操作        :- 14 天
寄送提醒於 :2026-06-17

常見問題

對月底日期加「月份」是怎麼運作的?

由於每個月天數不同,對 1 月 31 日加 1 個月會產生歧義。本計算器遵循標準慣例:截到目標月份的最後一天 — 1 月 31 日 + 1 個月 = 2 月 28 日(閏年為 29 日)。這與 Excel 的 EDATE 函式行為一致。

會計算週末和假日嗎?

預設會 — 「加 5 天」就是加 5 個日曆天。若需要計算工作日(跳過週末並可選擇排除假日),請使用專用的「工作日計算器」工具;本頁僅處理純日曆運算。

可以同時加上年、月、週、日嗎?

可以。結果會依照年 → 月 → 週 → 日的順序套用,這也是大多數日期函式庫(包括 JavaScript Temporal 提案)採用的慣例。順序很重要:對 1 月 1 日加上「1 個月又 30 天」與「30 天又 1 個月」會落在不同日期。

如何處理日光節約時間(DST)?

計算以日曆日期為準,而非絕對時間,因此跨越 DST 轉換加「一天」後,當地時區的時刻仍然相同。如果需要精確到 24 小時的運算,請將單位改為小時而不是天。

支援的日期範圍是多少?

JavaScript Date 涵蓋從 1970 年起 ±100,000,000 天,大約是公元前 271,821 年到公元 275,760 年。本計算器可以處理該範圍內任何歷史或遠未來的日期。1582 年葛利果曆改革之前的日期,請注意當地民曆可能不同。

為什麼日期相減和加上負數天數的結果不一樣?

其實是一樣的 — 減 N 天等同於加 -N 天。如果你想求兩個日期之間的差距,請使用「日期差計算器」工具。本頁是單向運算:起始日期加上或減去一段時間長度。

我的資料會被上傳嗎?

不會。計算在你的瀏覽器中執行。重新整理頁面後輸入會被清除。