excel日期時間如何相加減
在日常辦公和數據處理中,我們經常需要對Excel中的日期和時間進行加減運算,以計算時間差、截止日期、工作時長等。Excel提供了非常強大且靈活的日期時間計算功能,掌握這些技巧能極大地提高我們的工作效率。
一、 Excel日期和時間的本質
在深入講解如何相加減之前,理解Excel如何存儲日期和時間至關重要。Excel將日期和時間存儲為序列號。
- 日期: 從1900年1月1日開始算起,1900年1月1日是序列號1。每天遞增1。例如,2026年10月26日的序列號是45224。
- 時間: 是24小時制的小數部分。例如,中午12:00的序列號是0.5,下午18:00是0.75,而24:00(午夜)是1(相當於第二天的00:00)。
這意味著,當你在Excel單元格中輸入日期或時間時,Excel實際上將其轉換為一個數字。這種數字的表示方式使得日期和時間的加減運算變得非常直觀和簡單。
二、 日期相加減
對日期進行加減運算,本質上就是對日期對應的序列號進行加減運算。
1. 增加或減少天數
這是最常見的日期加減操作。你可以直接在日期序列號上加上或減去一個整數來表示天數。
公式: =日期單元格 + 整數 或 =日期單元格 - 整數
示例:
假設A1單元格包含日期「2026/10/26」。
- 要在A1日期上增加7天,可以使用公式:
=A1 + 7。結果將顯示為「2026/11/02」。 - 要在A1日期上減去3天,可以使用公式:
=A1 - 3。結果將顯示為「2026/10/23」。
重要提示: 運算結果的顯示格式可能需要調整。如果結果顯示為數字,請將該單元格格式設置為「日期」。
2. 計算兩個日期之間的天數差
計算兩個日期之間的差值,直接將結束日期減去開始日期即可。
公式: =結束日期單元格 - 開始日期單元格
示例:
假設A1單元格是開始日期「2026/10/01」,B1單元格是結束日期「2026/10/26」。
在C1單元格輸入公式:=B1 - A1。結果將是25,表示兩個日期之間相差25天。
3. 使用TODAY()函數
TODAY()函數返回當前系統的日期。這在計算距離當前日期的天數時非常有用。
示例:
如果你想知道一個特定日期距離今天的還有多少天(或者已經過了多少天):
- 假設A1單元格是目標日期「2026/12/25」。
- 計算距離今天的剩餘天數:
=A1 - TODAY()。 - 計算今天距離A1日期的天數(如果是過去的日期,結果為負數):
=TODAY() - A1。
4. 使用EDATE()函數
EDATE()函數用於返回指定日期之前或之後指定月份的日期。它在需要計算「N個月後」或「N個月前」的日期時非常方便,並且會正確處理月末的複雜情況(例如,1月31日加一個月是2月28日或29日)。
語法: EDATE(start_date, months)
start_date:起始日期。months:要加或減的月數。正數表示未來,負數表示過去。
示例:
假設A1單元格包含日期「2026/10/26」。
- 計算3個月後的日期:
=EDATE(A1, 3)。結果將是「2026/01/26」。 - 計算6個月前的日期:
=EDATE(A1, -6)。結果將是「2026/04/26」。
5. 使用WORKDAY()函數
WORKDAY()函數計算在周末和指定節假日之外的工作日(不包括開始日期)的日期。這對於計算項目截止日期、工作日天數等非常有用。
語法: WORKDAY(start_date, days, [holidays])
start_date:起始日期。days:要計算的天數。正數表示未來,負數表示過去。[holidays]:可選參數,是一個包含節假日日期的單元格區域或數組。
示例:
假設A1單元格包含日期「2026/10/26」(周四)。
- 計算從A1開始的5個工作日後的日期(不包括A1,且不考慮周末和節假日):
=WORKDAY(A1, 5)。結果將是「2026/11/02」(周四)。(周五、周一、周二、周三、周四) - 如果你的公司有節假日,比如11月1日是法定節假日,你可以將這個日期放在D1單元格。計算5個工作日後,忽略周末和11月1日:
=WORKDAY(A1, 5, D1)。
三、 時間相加減
時間是日期序列號的小數部分。因此,對時間進行加減運算,也如同對數字進行加減運算。
1. 增加或減少時間
你可以直接在時間序列號上加上或減去一個表示時間的小數。
公式: =時間單元格 + 小數 或 =時間單元格 - 小數
如何表示時間的小數:
- 1小時 = 1/24
- 1分鐘 = 1/(24*60)
- 1秒 = 1/(24*60*60)
示例:
假設A1單元格包含時間「09:00」。
- 增加2小時:
=A1 + (2/24)。結果將顯示為「11:00」。 - 增加30分鐘:
=A1 + (30/(24*60))。結果將顯示為「09:30」。 - 減去1小時15分鐘:
=A1 - (1/24) - (15/(24*60))。結果將顯示為「07:45」。
更方便的輸入方式: 直接使用Excel的時間格式輸入。
示例:
假設A1單元格包含時間「09:00」。
- 增加2小時:
=A1 + TIME(2,0,0)。其中TIME(hour,minute,second)函數可以將小時、分鐘、秒轉換為Excel的時間序列號。結果將是「11:00」。 - 增加1小時30分鐘:
=A1 + TIME(1,30,0)。結果將是「10:30」。
2. 計算兩個時間之間的時長差
直接將結束時間減去開始時間即可。結果是一個小數,表示不足一天的時間。
公式: =結束時間單元格 - 開始時間單元格
示例:
假設A1單元格是開始時間「09:00」,B1單元格是結束時間「17:30」。
在C1單元格輸入公式:=B1 - A1。結果可能顯示為「0.3541666667」。
格式化結果: 為了更清晰地顯示時長,需要將C1單元格格式設置為「自定義」格式,例如 `[h]:mm:ss` 或 `h:mm`。方括弧[h]表示可以顯示超過24小時的總小時數。
四、 日期和時間混合相加減
當包含日期和時間時,Excel會將其作為一個整體的日期時間序列號進行處理。
1. 計算兩個日期時間戳之間的差值
直接相減即可,結果是一個小數,代表不足一天的時間差。
公式: =結束日期時間單元格 - 開始日期時間單元格
示例:
假設A1單元格是「2026/10/26 09:00」,B1單元格是「2026/10/27 17:30」。
在C1單元格輸入公式:=B1 - A1。結果將是1.3541666667。
格式化結果: 同樣,需要將C1單元格格式設置為 `[h]:mm:ss` 或 `[d] "天" h:mm:ss` 等來正確顯示天數和時間。
2. 在日期時間戳上加減固定天數或時間
可以將日期和時間分開處理,或者將需要加減的時間轉換為Excel可以識別的序列號。
示例:
假設A1單元格是「2026/10/26 09:00」。
- 增加1天6小時:
=A1 + 1 + (6/24)。結果將是「2026/10/27 15:00」。 - 使用
TIME()函數:=A1 + 1 + TIME(6,0,0)。結果同上。
五、 使用DATEDIF()函數計算日期差(天、月、年)
DATEDIF()函數是一個非常有用的函數,用於計算兩個日期之間的年、月、日差。它比較靈活,但需要注意其用法。
語法: DATEDIF(start_date, end_date, unit)
start_date:開始日期。end_date:結束日期。unit:計算的單位,可以是:- "Y":計算兩個日期之間的完整年數。
- "M":計算兩個日期之間的完整月數。
- "D":計算兩個日期之間的完整天數。
- "MD":計算兩個日期之間除去整月後剩餘的天數。
- "YM":計算兩個日期之間除去完整年數后剩餘的月數。
- "YD":計算兩個日期之間除去完整年數后剩餘的天數。
示例:
假設A1單元格是「2020/01/15」,B1單元格是「2026/10/26」。
- 計算完整年數:
=DATEDIF(A1, B1, "Y")。結果將是3。 - 計算完整月數:
=DATEDIF(A1, B1, "M")。結果將是45。 - 計算完整天數:
=DATEDIF(A1, B1, "D")。結果將是1380。 - 計算除去整年後的剩餘月數:
=DATEDIF(A1, B1, "YM")。結果將是9。 - 計算除去整年和整月後的剩餘天數:
=DATEDIF(A1, B1, "MD")。結果將是11。
組合使用: 你可以將 DATEDIF 函數的結果組合起來,以更人性化的方式顯示日期差,例如「3年9個月11天」。
=DATEDIF(A1,B1,"Y") & "年" & DATEDIF(A1,B1,"YM") & "個月" & DATEDIF(A1,B1,"MD") & "天"
注意: DATEDIF 函數在Excel的幫助文檔中可能找不到,但它確實存在並可用。
六、 工作時長計算
在計算員工工作時長時,通常需要考慮開始時間和結束時間,有時還需要考慮午休時間。
基礎計算(不考慮午休):
假設A1是上班時間(如 08:00),B1是下班時間(如 17:00)。
時長(小數格式):=B1 - A1
時長(格式化為 h:mm):將單元格格式設置為 `[h]:mm`。
考慮午休時間:
假設A1是上班時間(如 08:00),B1是下班時間(如 17:00),C1是午休開始時間(如 12:00),D1是午休結束時間(如 13:00)。
計算工作時長:=(B1-A1) - (D1-C1)。
處理跨天的工作時長:
如果工作時間可能跨越午夜(例如,夜班),直接相減可能得到負數或不正確的結果。這時,你需要判斷結束日期時間是否小於開始日期時間,如果是,則加上1(代表加一天)。
公式: =IF(B1
對於更複雜的情況,例如包含多個休息時段,可以使用多個IF語句或SUMPRODUCT函數來處理。
七、 格式化和注意事項
單元格格式:
- 當進行日期時間運算時,務必確保參與運算的單元格格式為「日期」、「時間」或「常規」。
- 運算結果的單元格格式需要根據需要進行設置。對於計算出的天數差,通常設置為「常規」或「數字」;對於計算出的時長,則需要設置為自定義格式如 `[h]:mm:ss` 或 `h:mm`。
數據有效性:
在輸入日期時間數據時,可以設置數據有效性,確保輸入的格式正確,避免因輸入錯誤導致的計算問題。
Excel的日期系統:
Excel默認使用1900日期系統(儘管有一個1904日期系統,但除非特殊設置,否則不使用)。1900年2月29日被Excel錯誤地識別為一個有效日期,這可能在極少數情況下引起問題,但對大多數日常計算影響不大。
---常見問題 (FAQ)
1. 如何計算兩個日期之間有多少個工作日?
您可以使用WORKDAY.INTL函數來計算兩個日期之間不包含周末和節假日的工作日數量。其語法為 WORKDAY.INTL(start_date, days, [weekend], [holidays])。其中weekend參數可以自定義周末的類型,例如1代表周六周日,2代表周日周一等等。若要計算兩個日期之間的總工作日,可以將days參數設置為兩個日期之間的差值,然後設置自定義的weekend參數(如1111100表示周六周日為休息日)。更簡單的方法是使用NETWORKDAYS.INTL函數,它直接返回兩個日期之間的工作日數,例如 =NETWORKDAYS.INTL(開始日期, 結束日期, "0000011"),這裡的"0000011"表示周六周日為周末。
2. 為什麼我計算出的日期或時間是數字?
這是因為Excel在內部將日期和時間存儲為序列號。當您進行運算后,如果結果單元格的格式不是日期或時間格式,它就會顯示為原始的數字序列。您只需要選中顯示為數字的單元格,右鍵選擇「設置單元格格式」,然後在「數字」選項卡中選擇「日期」或「時間」格式即可。
3. 如何在Excel中計算包含加班的工時,例如超過8小時算加班?
首先,您需要計算每天的總工時,可以使用上面提到的方法:=IF(下班時間<上班時間, 下班時間+1-上班時間, 下班時間-上班時間)。然後,您需要判斷總工時是否超過8小時。如果超過,則計算加班時長。例如,如果總工時在C1單元格,那麼加班時長可以計算為 =MAX(0, C1 - TIME(8,0,0))。MAX(0, ...)`確保了如果工時不足8小時,結果不會是負數。您還需要將該單元格格式化為時間格式 `[h]:mm`。
4. DATEDIF函數返回#NUM!錯誤是什麼原因?
DATEDIF函數返回#NUM!錯誤通常有以下幾種原因:1. `end_date`小於`start_date`。2. `unit`參數無效(例如輸入了錯誤的單位字元)。3. 兩個日期之間不存在有效的年、月、日差(例如,start_date 和 end_date 是同一天,且unit不是"D")。請仔細檢查您的日期輸入是否正確,以及unit參數的拼寫和有效性。
5. 如何將一個日期加上一個工作日?
要將一個日期加上一個工作日,可以使用WORKDAY函數。例如,如果您的日期在A1單元格,您可以使用公式 =WORKDAY(A1, 1)。這個公式會將A1單元格的日期向前推算一個工作日(不包括周末和節假日)。如果您想加上N個工作日,只需將公式中的1改為N即可。如果您需要包含特定的節假日,可以在WORKDAY函數中添加第三個參數,指定一個包含節假日日期的單元格區域。

