要將日期差異表示為日曆年、月和日,請先計算日曆月數,再計算剩餘天數。本 Numbers 操作指南使用合成的發表日期和明確的月末規則,方便你核對結果。
例如,依照下方的方法,2022 年 5 月 18 日到 2025 年 9 月 24 日的差異為 3 年、4 個月又 6 天。你將建立一份可重複使用的試算表,也能處理 2 月、閏年和 1 月 31 日等日期。
選擇日曆差異的定義
計算日曆差異需要起始日期,以及逐月推進的規則。將經過的天數除以 365,再除以 30,無法保留日曆邊界,因為各月和各年的長度不同。TC39 的日期 API 文件在說明為何日期差異預設以天為單位,除非指定較大的單位時,明確指出了這項區別。Temporal.PlainDate 文件。
本操作指南對現代公曆日期採用以下慣例:
- 從較早的日期往較晚的日期計算。
- 找出不會超過結束日期的最大整月偏移量。
- 如果目標月份有起始日期的日數,就保留該日數;否則使用該月的最後一天。
- 每 12 個月換算為 1 年,然後計算錨點日期到結束日期之間的天數。
依照此慣例,2025 年 1 月 31 日到 2 月 28 日為 1 個月。2025 年 1 月 31 日到 3 月 30 日則為 1 個月又 30 天:兩個月的錨點會是 3 月 31 日,超過了結束日期。這些結果來自所選規則,並非對月份的普遍定義。
請計算經過的日期,不要將起訖兩端都算入天數。因此,相同日期的差異為 0 年、0 個月、0 天。如果你的任務是計算某個日期範圍包含多少筆帶日期的日曆項目,那是另一種計算。
將民用日期與時間戳記分開處理
像 2025-09-24 這樣的發表日期是民用日期:日曆中的年、月、日。它不包含時間,也不代表一個特定時刻。像 2025-09-24T00:30:00+02:00 這樣的時間戳記包含時間和數字 UTC 位移,因此可以標示一個特定時刻。RFC 3339 定義了對應的完整日期和日期時間語法。RFC 3339:網際網路上的日期和時間:時間戳記。
+02:00 這類位移表示與 UTC 的關係。Europe/Paris 這類具名時區則提供在特定時刻與當地時間之間轉換的規則;適用的位移可能會改變。RFC 9557 區分了這些概念,並說明為何單靠位移不足以提供當地日曆運算所需的規則。RFC 9557:帶有附加資訊的時間戳記。
在這份試算表中,請直接輸入預定的發表日期。如果來源資料包含時間戳記,請先決定以哪個具名時區界定發表日期,並將兩個時間戳記轉換為該時區的日期。例如,2025-09-24T00:30:00+02:00 與 2025-09-23T22:30:00Z 是同一個時刻;如果未先選定參考時區,就先採用顯示的日期,可能會讓輸入日期差一天。
在 Numbers 中建立日期差異工作表
你需要在 Mac 上使用 Numbers,並建立一個包含 A 到 J 欄及至少兩列的表格。第 1 列用來放標籤,第 2 列用來計算。以下公式使用英文函數名稱和逗號分隔符號。
若要輸入公式,請選取目的儲存格,輸入或貼上以 = 開頭的公式,然後按 Return。Apple 說明,輸入等號會開啟 公式編輯器,而 函數瀏覽器 中提供函數說明。在 Mac 上的 Numbers 中使用表格儲存格中的資料計算數值。
輸入明確無歧義的起始和結束日期
將 A1 標記為 開始日期,將 B1 標記為 結束日期。輸入以下合成的發表日期:
| 儲存格 | 公式 | 預定日期 |
|---|---|---|
A2 |
=DATE(2022,5,18) |
2022 年 5 月 18 日 |
B2 |
=DATE(2025,9,24) |
2025 年 9 月 24 日 |
使用 DATE(year,month,day) 可避免不同地區對日期字串的解讀有所歧異。Apple 特別建議使用此函數,以確保不同地區設定下的日期解讀一致。請提供有效的日曆日期,包括每個月正確的天數。DATE。
繼續之前,請確認結束日期與起始日期相同或晚於起始日期。這份工作表刻意計算向前的日期差異,並未定義負的日曆期間。
找出結束日期之前最後一個日曆錨點
依序在第 2 列輸入以下標籤和公式:
| 儲存格 | 第 1 列標籤 | 第 2 列公式 |
|---|---|---|
C2 |
候選月數 |
=(YEAR(B2)-YEAR(A2))*12+MONTH(B2)-MONTH(A2) |
D2 |
完整月數 |
=C2-IF(DATE(YEAR(B2),MONTH(B2),MIN(DAY(A2),DAY(EOMONTH(B2,0))))>B2,1,0) |
E2 |
錨點月份的第一天 |
=EDATE(DATE(YEAR(A2),MONTH(A2),1),D2) |
F2 |
錨點日期 |
=DATE(YEAR(E2),MONTH(E2),MIN(DAY(A2),DAY(EOMONTH(E2,0)))) |
第一個公式會計算兩個年月位置之間的距離。Apple 的 YEAR 和 MONTH 函數可從日期值擷取這些組成部分。YEAR、MONTH。
第二個公式會測試結束月份中的錨點。其日數是起始日期的日數和該月份最後一天的日數兩者中較小的值。如果這個候選日期晚於結束日期,公式就會減去一個月。這項條件式調整使用了 IF 的文件所述行為。IF。
剩下的公式會建立實際錨點。EDATE 會將起始月份的第一天移動指定的偏移量,避免中間步驟出現無效日期。EDATE。
接著,工作表會明確套用月末規則:DAY 會擷取日數,EOMONTH 會提供目標月份的最後日期,而 MIN 則會選出較小的日數。如此一來,短月份的處理方式便清楚呈現在公式中。DAY、EOMONTH、MIN。
將結果表示為年、月和日
使用以下公式完成工作表:
| 儲存格 | 第 1 列標籤 | 第 2 列公式 |
|---|---|---|
G2 |
年 |
=QUOTIENT(D2,12) |
H2 |
月 |
=MOD(D2,12) |
I2 |
日 |
=DATEDIF(F2,B2,"D") |
J2 |
日曆差異 |
=G2&" years, "&H2&" months, "&I2&" days" |
QUOTIENT 會提供整數除法的結果,MOD 則會提供餘數,將完整月數轉換成年和剩餘月數。QUOTIENT、MOD。
對於範例日期,D2 應為 40,而 F2 應代表 2025 年 9 月 18 日。從該錨點到 9 月 24 日相差 6 天,因此結果為 3 年、4 個月又 6 天。為求簡潔,文字公式使用固定的複數標籤;個別數值欄仍可用於其他計算。
檢查月末和閏年
使用以下合成日期組合來檢查工作表採用的慣例。只替換 A2 和 B2 中的公式,其他公式保留不變:
| 起始日期 | 結束日期 | 預期年、月、日 | 錨點日期 |
|---|---|---|---|
| 2022 年 5 月 18 日 | 2025 年 9 月 24 日 | 3、4、6 | 2025 年 9 月 18 日 |
| 2025 年 1 月 31 日 | 2025 年 2 月 28 日 | 0、1、0 | 2025 年 2 月 28 日 |
| 2024 年 1 月 31 日 | 2024 年 2 月 29 日 | 0、1、0 | 2024 年 2 月 29 日 |
| 2024 年 2 月 29 日 | 2025 年 2 月 28 日 | 1、0、0 | 2025 年 2 月 28 日 |
| 2025 年 1 月 31 日 | 2025 年 3 月 30 日 | 0、1、30 | 2025 年 2 月 28 日 |
| 2025 年 9 月 24 日 | 2025 年 9 月 24 日 | 0、0、0 | 2025 年 9 月 24 日 |
這些是依照上述規則計算的範例。錨點演算法已透過確定性的 Python 計算進行檢查,其中包括 10,000 組生成的日期配對;但並未實際執行 Numbers 介面。
請重建計算路徑來檢查結果:從原始起始日期出發,依照所述月末規則,推進 D2 中的總月數,再推進 I2 中的天數。你應該會得到結束日期。請務必從原始起始日期計算月份錨點:逐月推進可能會在經過 2 月後失去原本的日數。
為何不合併三個 DATEDIF 結果?
Apple 說明了 DATEDIF 的選項,分別用於計算年、忽略年的月,以及忽略月和年的日。\"MD\" 選項會套用特定的日數計算方式,其中涉及替換月份。因此,不應假設它代表依照你選定的月末調整後剩餘的天數。這份工作表只在明確錨點與結束日期之間使用 \"D\"。DATEDIF。
將操作對應到日期 API
對於實作此任務的軟體,TC39 說明了一種僅表示日期的型別 Temporal.PlainDate,以及可識別日曆的差異計算操作。以 largestUnit: 'year' 要求 until,會產生以年和較小單位表示的期間;若保留預設選項,則會以天為單位計算差異。其文件也說明了受限月份加法,並會拒絕不同日曆系統日期之間的差異,除非先將它們轉換為共同日曆。Temporal.PlainDate 文件。
這些 API 選擇再次凸顯工作表的關鍵決策:辨識僅含日期的輸入、選擇日曆、指定最大單位,並保留用來解讀月份的錨點。日期字串標準說明的是表示方式;光是選擇一種表示方式,並不會替你的任務選定月末慣例。
使用輸出前先排除異常結果
如果公式發生錯誤,請選取錯誤指示符來查看訊息;Apple 的 Numbers 指南記載了這個診斷步驟。請檢查儲存格參照,並使用 函數瀏覽器 插入引數;如果你的安裝版本預期使用不同的公式分隔符號,也請一併確認。在 Mac 上的 Numbers 中使用表格儲存格中的資料計算數值。
如果計算結果看似合理,卻與其他工具不同,請比較對方的月末規則是否與這份工作表相同。另外也請檢查其他工具是否同時計入起訖兩端、使用時間戳記而非民用日期,或對結果進行四捨五入。請勿將倒序日期或空白輸入帶入這項向前計算,也不要用 0 取代錯誤。
若要重複比較發表日期,請將起始日期、結束日期和錨點保留在最終文字旁。這些資訊能讓「3 年、4 個月又 6 天」這類結果可追溯至特定的日曆計算。
來源
- 在 Mac 上的 Numbers 中使用表格儲存格中的資料計算數值 — Apple。
- DATE — Apple。
- YEAR — Apple。
- MONTH — Apple。
- IF — Apple。
- EDATE — Apple。
- DAY — Apple。
- EOMONTH — Apple。
- MIN — Apple。
- QUOTIENT — Apple。
- MOD — Apple。
- DATEDIF — Apple。
- Temporal.PlainDate — Ecma TC39。
- RFC 3339:網際網路上的日期和時間:時間戳記 — RFC Editor。
- RFC 9557:網際網路上的日期和時間:帶有附加資訊的時間戳記 — RFC Editor。