Chapter 8. 函式 (三):日期與時間 › 8.3 日期與時間運算
8.3 日期與時間運算
在第 2.5 節有提到過,日期與時間是「數字」的一種,是以 1899/12/30 為 0,之後每一天多加 1,既然日期與時間可以轉為數字,那肯定也可以進行加減,例如在日期運算中,DATE(2024,1,1)+1 就會輸出 2024/1/2,以此類推。如下圖所示:

瞭解日期運算的基本概念後,接下來將介紹多個計算日期時常用的函式:
- EDATE / EOMONTH:輸出特定日期前後 n 個月的日期 / 最後一天:
語法 | |
輸入 |
|
輸出 |
|
- DATEDIF / DAYS:計算兩個日期的間隔單位數 / 天數:
語法 | |
輸入 |
|
輸出 |
由上述可知,DAYS 可用 DATEDIF (開始日期, 結束日期, "D") 取代。 |
- WORKDAY / WORKDAY.INTL:計算某日後的幾個工作天是幾月幾號:
語法 |
|
輸入 |
|
輸出 | 開始日期 後的 天數 個工作天的日期,在 WORKDAY 中假設 週末 為週六 + 週日,而 WORKDAY.INTL 可視為能自訂 週末 的 WORKDAY。 |
- NETWORKDAYS / NETWORKDAYS.INTL:計算某段日期區間有幾個工作天:
語法 |
|
輸入 |
|
輸出 | 開始日期 後的 天數 個工作天的日期,在 WORKDAY 中假設 週末 為週六 + 週日,而 WORKDAY.INTL 可視為能自訂 週末 的 WORKDAY。 開始日期 與 結束日期 之間有幾個工作天 (含頭尾),在 NETWORKDAYS 中假設 週末 為週六 + 週日,而 NETWORKDAYS.INTL 可視為能自訂 週末 的 NETWORKDAYS。 |
了解以下公式的用法後,接下來使用七個範例說明:
- 取得今天往回推 3 個月的日期
公式
=EDATE(TODAY(),-3)
解說
開始日期 可使用其他公式的輸出,在此使用 TODAY() 取得今天日期。
- 取得下個月底的日期
公式
=EOMONTH(TODAY(),1)
解說
開始日期 可使用其他公式的輸出,在此使用 TODAY() 取得今天日期。
- 取得今年年初日期
公式
- =DATE(YEAR(TODAY()),1,1)
- =EOMONTH(TODAY(),-MONTH(TODAY()))+1
解說
- 可直接使用第 7.1~7.2 節介紹的函式,先取得今年年份,再使用 DATE 輸出今年的 1/1 即可。
- 可使用 EOMONTH 取得去年底的日期,再加上 1 天得到今年年初的日期。其中去年底的日期即 EOMONTH(今天, -今天所在月份)。
- 計算今年迄今已過天數 (不含今日)
公式
- =DAYS(TODAY(),DATE(YEAR(TODAY()),1,1))
- =DATEDIF(DATE(YEAR(TODAY()),1,1),TODAY(),"D")
- =TODAY()-DATE(YEAR(TODAY()),1,1)
解說
上述三種方式都是計算今天、今年 1/1 的差距,其中今年 1/1 使用 C. 的第一種方式。使用時可依據自己平常的偏好使用。
- 計算 2022/8/17 與 2024/6/24 距離幾年、幾個月又幾天
公式
=DATEDIF("2022/8/17","2024/6/24","Y"),其中 "Y" 換成 "YM"、"MD"。
解說
使用三個 DATEDIF 分別取得 幾年 / 幾個月 / 幾天。分別輸出 1 / 10 / 7,即間隔 1 年 10 個月又 7 天。
- 計算 2025/10/5 往後算 5 個上班日是哪一天
公式
- 不考慮國定假日:=WORKDAY("2025/10/5",5)
- 考慮國定假日:=WORKDAY("2025/10/5",5,國定假日)
解說
其中 國定假日 是將 10 月的國定假日放在儲存格中,在此有 2025/10/6、2025/10/10,也可以使用陣列代替,在此為 =WORKDAY("2025/10/5",5,
{DATEVALUE("2025/10/6"),DATEVALUE("2025/10/10")})。 - 計算 2025/10 整個月的上班日數
公式
- =NETWORKDAYS("2025/10/1","2025/10/31")
- =NETWORKDAYS("2025/10/1","2025/10/31",國定假日)
解說
國定假日 是將 10 月的國定假日放在儲存格中,也可使用陣列代替。