在儲存格輸入 2026/10/11,試算表會乖乖顯示成日期。但是拿兩個日期相減,有時候跑出來的卻是一個數字,有時候又變回日期,到底怎麼回事?
今天要來聊聊試算表是怎麼看待日期的,還有最常用的幾個日期函式:DATE、TODAY、NOW,以及把日期拆開的 YEAR、MONTH、DAY。
先看看手動算有多麻煩
我手上有三個專案,各有開工日和截止日:
| A | B | C | |
|---|---|---|---|
| 1 | 專案編號 | 開工日 | 截止日 |
| 2 | P01 | 2026/10/11 | 2026/12/31 |
| 3 | P02 | 2026/10/20 | 2026/11/15 |
| 4 | P03 | 2026/11/02 | 2027/01/20 |
我想知道每個專案從開工到截止有幾天。手動算的話,要翻月曆,10 月剩幾天、11 月 30 天、12 月 31 天,一個一個加起來,第三個還要跨年,想到就有點累了吧!
好在試算表裡的日期,其實就是數字,直接相減就有答案了。
日期序號
Google 試算表把每一天都對應成一個整數,叫做日期序號。起點是 1899/12/30,這一天的序號是 0,之後每過一天加 1。
| 日期 | 序號 |
|---|---|
| 1899/12/30 | 0 |
| 1899/12/31 | 1 |
| 1900/01/01 | 2 |
| 2026/10/11 | 46306 |
所以 2026/10/11 的序號 46306,意思就是「從 1899/12/30 算起的第 46306 天」。想看某個日期的序號,可以用 N 函式:
取得 2026/10/11 的日期序號
=N(DATE(2026,10,11))會得到 46306!
這邊要注意,Excel 的日期系統起點跟 Google 試算表差了一點點:Excel 的序號 1 是 1900/1/1,在 Google 試算表裡 1900/1/1 是 2,所以兩邊的序號在 1900/3/1 以前會差一天,之後就一致了。另外 Excel 還把實際不存在的 1900/2/29 當成一個日期,Google 試算表沒有這一天。平常算近年的日期不用擔心,但如果你要拿很古早的日期跟 Excel 對照,就要記得這件事。
DATE
DATE 可以用年、月、日三個數字組出一個真正的日期。
語法
- 年:四位數的年份。0 到 1899 之間的數字會被自動加上 1900,所以 得到的是 3799/12/30,不是序號 0 那天;兩位數的年份也一樣, 是 1999/01/01;民國年記得先加 1911 再丟進來。
- 月:1 到 12 的月份。
- 日:1 到 31 的日。
範例
我想用函式組出國慶日:
組出 2026/10/10
=DATE(2026,10,10)你會看到 2026/10/10。這個結果是一個真的日期,序號是 46305,不是文字。
月和日也可以超過正常範圍,它會自動往後進位。我個人滿常用這個特性:
月份超過 12,進位到下一年
=DATE(2026,13,1)結果是 2027/01/01。同樣地, 會是 2026/11/04,因為 10 月只有 31 天,多出來的 4 天進到 11 月。
TODAY 和 NOW
TODAY 回傳今天的日期,不需要參數。NOW 回傳現在的日期加時間。
- :今天的日期。
- :現在的日期和時間。
它們的結果每天都會變,所以我沒辦法在這邊貼固定的結果給你看。假設今天是 2026/10/11, 就會顯示 2026/10/11,明天打開同一份試算表,同一格就變成 2026/10/12。
NOW 比 TODAY 多了時間的部分,如果只想要日期, 去掉小數之後,跟 TODAY() 是同一天。
這兩個函式每次試算表重新計算都會更新,官方稱為揮發性函式(volatile)。我的習慣是只放在少數幾格,其他公式去參照那一格就好,不用每一列都放一個 TODAY()。
YEAR、MONTH、DAY
這三個函式剛好是 DATE 的反方向,把日期拆回數字。
取出年份
=YEAR(DATE(2026,10,10))取出月份
=MONTH(DATE(2026,10,10))取出日
=DAY(DATE(2026,10,10))依序會得到 2026、10、10。實際用的時候,括號裡通常是參照某個儲存格,比如 。
日期加減
既然日期是數字,加減就跟一般數字一樣。
回到開頭的專案表,我想算開工到截止有幾天,在 D2 輸入:
截止日減開工日,得到天數
=C2-B2P01 的結果是 81,P02 是 26,P03 是 79。順便手算一下 P02:10/20 到 10/31 是 11 天,加上 11 月的 15 天,11 + 15 = 26,跟函式算的一樣。
日期相減的結果是個數字,儲存格通常直接顯示 81。如果那格之前被設成日期格式,81 就會被當成日期序號,顯示成 1900/03/21 這種看不懂的日期。把那格的格式改成「格式」>「數值」>「數字」就好,後面「顯示的樣子跟儲存格的值」會再說明。
日期加上一個數字,就是往後推幾天,比如截止日前一週的提醒日:
截止日往前推 7 天
=C2-7P01 的截止日是 2026/12/31,減 7 天是 2026/12/24。要往後推,就改成 +7。
看起來像日期的文字
從別的系統匯出來的資料,常常有「看起來是日期,但其實是文字」的格子。這種格子不能加減,排序也會亂掉。
我自己判斷的方法有兩個。第一個是看對齊,數字和日期預設靠右,文字預設靠左,如果整欄日期靠左,就要懷疑一下。第二個比較確定,用 ISNUMBER 問試算表:
檢查 A2 是不是真正的日期(數字)
=ISNUMBER(A2)真的日期會得到 TRUE,文字會得到 FALSE。比如用 做出一格文字的「2026/10/10」,對它用 ISNUMBER,結果會是 FALSE。
DATEVALUE
DATEVALUE 會把「看起來像日期的文字」轉成真正的日期序號。
- 日期字串:試算表認得的日期格式,例如
2026/10/10,要用雙引號包起來,或參照一個文字儲存格。
把文字日期轉成序號
=DATEVALUE("2026/10/10")結果是 46305,格式設成日期就會顯示 2026/10/10。再問一次 ,這次就是 TRUE 了。
要注意,DATEVALUE 只認得試算表看得懂的格式,像是「20261010」這種連在一起的八位數字,不能直接丟給它。這種情況可以用 LEFT、MID、RIGHT 拆開,再用 DATE 組起來。
顯示的樣子跟儲存格的值
同一個序號 46305,可以顯示成 2026/10/10,也可以顯示成 46305,或是「2026 年 10 月 10 日」。改的只是外觀,值還是 46305。
TEXT 可以把日期變成指定樣子的文字:
把日期變成 yyyy/mm/dd 格式的文字
=TEXT(DATE(2026,10,10),"yyyy/mm/dd")不過 TEXT 的結果是文字,不是日期,後面就不能再拿來加減了。這個「值」和「格式」分開的概念,在 值與格式的分離 有更完整的說明。
想改儲存格的外觀,可以選取儲存格後到「格式」>「數值」,裡面有日期、時間等選項。
時間是小數
日期是整數,時間就是小數,代表一天裡的比例。中午 12:00 是一天的一半,所以是 0.5,18:00 是 0.75。
2026/10/11 中午 12:00,序號就是 46306.5。我平常用到時間的機會比較少,不過知道是小數之後,工時相減這類計算就不奇怪了。
練習
專案提醒日與天數
用上面的專案表,B 欄是開工日、C 欄是截止日。在 D2 算出開工到截止的天數,在 E2 算出截止日前 7 天的提醒日,再往下複製。P01 的 D2 應該是多少?
要算年資、工作日、到期日,可以接著看 日期計算實戰,裡面有 DATEDIF、NETWORKDAYS、EDATE 等函式。
我是喜特先生,Mr. Sheet,我們下個教學見!
接下來可以
這篇在技能樹的 Lv.1「基礎操作」,模組「認識日期與時間」(第 1/1 篇)。讀完這篇,路線上的下一個模組是「安全地共用與協作」。
回到技能樹相關文章
查看所有文章儲存格的值與顯示格式:看起來一樣,其實不一樣
儲存格存的值和畫面上看到的樣子是兩件事。用圖看日期、百分比、小數位數、帶單位的數字,學會用 N、ISNUMBER 查出真相,也知道格式該設在哪裡。
年資、工作日、到期日:日期計算實戰
用 DATEDIF 算員工年資,用 NETWORKDAYS 和 WORKDAY 搭配假日清單算工作日,再用 EDATE 和 EOMONTH 算合約到期日與月底結帳日。
日期函式的陷阱:2/29 週年、月底、季末、DATEDIF 與週末字串
整理 DATE、EDATE、EOMONTH、DATEDIF、NETWORKDAYS.INTL、WORKDAY.INTL 常踩的坑:年份小於 1900 被加 1900、2/29 的週年日、月底連續推算、帶時間的月底篩選、DATEDIF 的 MD 單位、週末字串漏引號、補班日,以及 TODAY 讓結果每天都變。
留言討論
共 0 則留言
