是的,當您製作甘特圖時,結束日期會計入任務的一部分,而包含結束日期是甘特圖製作工具所使用的標準日曆天慣例。從 1 月 1 日執行到 1 月 3 日的任務會在時間軸上佔用三個日期儲存格,而不是兩個;橫條涵蓋 1 月 1 日、1 月 2 日和 1 月 3 日,就像壁掛日曆一樣。包含式語意之所以重要,是因為圖表視覺化的是日曆佔用情況,而非時數、工作日或工作量,因此最後一天屬於執行中的任務。無論您輸入的是單日任務(開始等於結束,佔用一個儲存格)、多週專案,或多年計畫,這個規則都成立;座標軸只會重新取樣其刻度標籤,而每個接受的日期都會留在橫條內部。在本文的其餘部分,您將了解包含日期以白話來說是什麼意思、它們如何改變橫條寬度(相較於排除式解讀)、保護這些語意的確切輸入規則,以及逐步示範如何建立正確計算結束日期的甘特圖。

包含結束日期的實際意義
在專案規劃中,「包含結束日期」一詞代表結束欄位中列出的那一天本身屬於工作的一部分。圖表會將它計為任務執行的一天,就像您在紙本日曆上打勾一樣。這個定義衍生出兩個結果。首先,任務佔用的天數等於包含的天數,您可以從開始到結束逐日計算日曆日期(不跳過)來得出。其次,您在圖表中看到的橫條是依據該包含天數所繪製,因此結束日期與開始日期相同的列,仍會呈現為一個可見的日期儲存格,而非塌縮成零寬度。
某些試算表公式透過將開始日期從結束日期相減來計算工期,這會產生排除式的結果。輸入 1 月 1 日到 1 月 3 日的任務時,=B2-A2 會傳回 2,即使工作實際佔用三天。那種落差正是甘特圖中大多數差一錯誤的根源。甘特圖製作工具在設計上避免了這個問題:圖表的水平網域從最早的任務開始日開始,到最晚包含任務日的結尾結束,每個橫條都使用相對於該網域的整數 UTC 天偏移來定位。
包含式語意如何改變橫條寬度與工期
以下是圖表在內部為每個接受的列所執行的計算。您排程中最小的 UTC 日期編號會成為圖表的左邊緣;最晚 UTC 日期的結尾則成為右邊緣。圖的寬度會除以該包含天數,而每個橫條的 x 座標會設為(開始日期減去最早日期)乘以單位寬度,其寬度則為包含天數乘以單位寬度。當開始與結束日期相同時,會產生一個儲存格寬的橫條,絕不會是零寬度的細線。
考慮一個輸入為 Research,2024-01-01,2024-01-03 的列。開始日期的偏移量相對於自身為 0,包含區間為三天,因此橫條會從左邊緣延伸到右邊緣,填滿整個圖表的網域寬度。如果您當時心裡想的是排除式結束,而輸入 Research,2024-01-01,2024-01-02,橫條會比任務實際執行的天數少顯示一天。這一天的空差,正是在您貼上排程之前值得先把包含式語意釐清的原因。
| 面向 | 包含結束日期(本工具) | 排除結束日期(有差一風險) |
|---|---|---|
| 1 月 1 日至 1 月 3 日計入的天數 | 3(1 月 1、2、3 日) | 2(1 月 1、2 日) |
| 同日期任務的寬度 | 1 個日期儲存格 | 0 個日期儲存格(塌縮) |
| 圖表的右邊緣 | 最晚任務日的結尾 | 正好是最晚那天 |
| 橫條 x 位置 | (開始日期減去最早日期),以整數 UTC 天偏移表示 | (開始日期減去最早日期),通常會被截斷 |
建立會計入結束日期的甘特圖
- 開啟甘特圖製作工具,若想在圖表上加上標題,可輸入最多 100 個 UTF-16 程式碼單位的選填標題。
- 貼上 2 到 30 個非空白列。每列必須剛好包含兩個半形逗號,產生三個欄位:任務標籤、開始日期、結束日期。
- 以嚴格的 YYYY-MM-DD 格式撰寫日期。結束日期必須在開始日期當天或之後,且解析器會將日期驗證為實際的預推格里高利 UTC 日曆日期,因此像 00 或 13 月、4 月 31 日、非閏年的 2 月 29 日這類無效日期都會被拒絕。
- 點擊「產生」。圖表會在共用的 UTC 日曆座標軸上為每個任務繪製一個帶標籤的水平橫條。62 天以內的區間會顯示日期刻度;更長的排程則會切換為月份刻度。
- 將每個橫條與刻度對照您的原始排程進行核對,然後下載獨立的 SVG 檔。匯出的檔案是直接由預覽所用的同一段 SVG 字串所建立,因此您審閱的內容就是您儲存的內容。
保護包含式語意的輸入規則
此格式刻意設計得很嚴格,以確保包含日期不致產生歧義。每個非空白列剛好使用兩個逗號,而非三個;不支援引號欄位、跳脫分隔符或多行欄位,因此需要逗號的標籤必須在使用前改寫為不含逗號的版本。每個欄位的前後空白會被去除。標籤長度上限為 80 個 UTF-16 程式碼單位、原始排程輸入上限為 20,000 個程式碼單位、序列化 SVG 輸出上限為 100,000 個程式碼單位;在邊界值時會被接受,超過一個單位則會被拒絕,且不會默默截斷。
日期會先以詞法模式(四位數字、一個連字號、兩位月份數字、再一個連字號、最後兩位日期數字)進行驗證,然後透過 UTC 日曆進行往返轉換。這個往返轉換正是能抓出 4 月 31 日與非閏年 2 月 29 日的原因,也正因為如此,詞法上 0000 到 9999 的年份範圍能完整支援,無需使用 JavaScript 為 0 到 99 年保留的特殊數值處理。空白行只會在檢查過原始輸入預算後被略過,因此新增空白填補無法繞過 20,000 程式碼單位的上限。若您需要逗號規則的快速參考,請參閱關於甘特圖任務標籤是否能包含逗號的指南。
圖表如何視覺化包含日
解析器接受一列之後,圖表會將每個包含天數轉換為具有確定座標的水平矩形。接下來遵循兩條視覺規則。第一,座標軸是重新取樣而非截斷:62 天以內的區間使用確定性的日期刻度,標籤格式為 YYYY-MM-DD;而更長的排程則使用確定性的月份刻度,標籤格式為 YYYY-MM。即便取樣步進本來會略過,圖表也一定會在刻度標籤中包含第一個日期與最後一個日期。
第二,圖表繪製的是被接受的內容。允許重疊的任務與重複的標籤,且依輸入順序保留為各自獨立的列,因此兩個相同標籤的列仍會產生兩個可見的橫條。若排程中每個任務都落在同一日期上,網域就會是一天;由於計算永遠不會以零個經過區間為分母,每個橫條仍會顯示出來。較寬的輸出會在預覽中捲動,而非縮小標籤,因此即使在窄螢幕上橫條的可讀性也能保留。輸出遵循W3C SVG 2 規範的命名空間、角色、viewBox 與可存取標籤,並繪製在固定 1,100 像素的邏輯寬度上,高度則依列數而定。
| 排程區間 | 刻度模式 | 刻度標籤格式 | 取樣行為 |
|---|---|---|---|
| 62 天以內 | 日期刻度 | YYYY-MM-DD | 確定性的逐日標籤 |
| 超過 62 天 | 月份刻度 | YYYY-MM | 依完整月份數的固定月份步進,永遠包含第一個與最後一個日期 |
能證明包含式語意有效的邊界案例
有幾個情境值得用來測試任何宣稱會將結束日期納入考量的甘特圖工具。輸入為 Review,2024-01-15,2024-01-15 的單日任務,應剛好佔用一個日期儲存格。輸入為 Workshop,2024-01-01,2024-01-03 的三天任務,應佔用三個日期儲存格並填滿整個三天的網域。同日期的排程(每列在兩個日期欄都填寫 2024-01-01),由於包含網域為一天,每個橫條仍應呈現為一個儲存格的寬度。
刻意重疊的兩列(例如 Planning,2024-01-01,2024-01-05 與 Design,2024-01-04,2024-01-08),應呈現為兩個獨立橫條,且具有兩天的重疊區間,而不是合併。橫跨年份的排程(例如 Audit,2023-12-29,2024-01-02),應在座標軸上保留全部五個包含日期都顯示出來;且只有當區間超過 62 天時,圖表才會從日期刻度切換到月份刻度。這些情況都不需要在輸入上使用任何變通做法;只要日期是實際的 UTC 日曆日期、且結束日期在開始日期當天或之後,上述規則即可處理。
當包含日期不足以因應時
包含結束日期告訴您的是任務如何佔用日曆,而非排程是否可行。甘特圖製作工具不會解析相依性、里程碑、工作日曆、進度、負責人、或時區;它刻意避免推測重疊的工作是否合理。如果您的計畫需要相依性箭頭、要徑分析或營運承諾,請將下載的 SVG 視為視覺成品,並將同樣的列餵入專門的專案管理軟體以處理其餘工作。對於您搜尋的實際問題——「結束日期是否會計入」——本工具內建的答案永遠是「會」,且預覽內容就是下載內容。
想看更深入的探討,請參閱單一畫面顯示日期與時間的時鐘。