請輸入開始日和結束日。除了兩個日期相差的天數,也會一起算出結束日也算 1 天的天數(頭尾都算),以及用週數、月數、年月日表示的值。
這個頁面可以做什麼
- 只要輸入開始日和結束日,就能當場知道兩個日期相差幾天。其中一個留空,就能馬上算出「今天距離考試還有幾天」「紀念日到今天過了幾天」
- 同時顯示「不算開始日的天數(日期相減)」和「開始日、結束日都算的天數(頭尾都算)」,算住宿晚數、吃藥天數、按日計算的費用時不會搞混
- 也會一起顯示同一段期間以「幾年幾個月幾天」「幾個月」「幾週」表示的值
- 淺顯易懂的天數算法解說,以及可直接複製到 Excel、Google 試算表、Python 的公式,也都整理在這個頁面
這個計算有什麼用?
「今天是 7 月 3 日,考試在隔年 1 月 16 日,就還有 197 天。」知道剩下幾天,就能用數字而不是感覺來規劃。例如想在大約 200 天內做完 10 回模擬考,每回可以分配 20 天。
倒數計時用的是不算今天的減法。考前一天顯示「還有 1 天」,考試當天是「還有 0 天」。
8 月 13 日入住、8 月 16 日退房的旅行,用減法是 \(16 - 13 = 3\) 夜,用頭尾都算是 4 天,也就是「4 天 3 夜」。
飯店按晚數(減法)計價,旅平險或部分租借則按天數(頭尾都算)計價。知道兩者的差別,預算就不會算錯。(租車常以 24 小時為 1 天計算,和日曆天不同。)
「從 7 月 1 日開始的 7 天份」藥,要用連第一天也算的頭尾都算,最後吃藥的日子是 7 月 7 日。用減法(\(7 - 1 = 6\))去想就會差 1 天。
想確認「藥夠不夠吃到下次回診或領藥」,就要比較兩種算法不同的天數:開藥的天數(頭尾都算)和距離回診的天數(減法)。知道差別,就能避免藥吃完了還沒回診。
7 月 10 日搬進去的那個月,房租常以 10 日到 31 日的 22 天(頭尾都算:\(31 - 10 + 1 = 22\))除以 31 天來按日計算。搬進去當天就開始使用房子,所以第一天也要算。
月中到職或離職的薪水也是同樣的想法。天數的算法(頭尾算不算)可能依租約或契約而不同,可以用這個計算機核對契約上寫的數字。
利息按天數比例計算,例如「本金 × 年利率 × 天數 ÷ 365」。銀行常見的算法是存入那天起算、提領那天不算,也就是算頭不算尾,和減法相同。
例如 4 月 1 日存入、4 月 30 日提領,計息天數是 29 天。算法差 1 天,利息就會不同,所以這可以幫助您看懂存款或貸款文件上的計息規定。
懷孕週數以最後一次月經的第一天為第 0 天計算,第 280 天(\(280 = 7 \times 40\),所以是懷孕 40 週 0 天)一般就是預產期。「今天是懷孕幾週又幾天?」正是本頁的週數公式:把從開始日起的天數除以 7。
產檢的時程大多以週數安排,能在天數和週數之間換算,看孕婦健康手冊的紀錄就輕鬆多了。
公式
符號與用語解說
符號
| \(D\) | D | 兩個日期相差的天數(以開始日為第 0 天,日期相減的答案),取自表示天數的英文 Days 的字首。 |
| \(N_1\)、\(N_2\) | N 下標 1、N 下標 2 | 替開始日(\(N_1\))和結束日(\(N_2\))編的號碼,和 Excel 的序列值(以 1900 年 1 月 1 日為 1 號的連續號碼)是同樣的想法。 |
| \(D'\) | D prime | 開始日和結束日都算 1 天的天數(頭尾都算)。\(D' = D + 1\)。右上的撇號(′)常用來表示「把原本的量稍微改變後的量」。 |
| \(W\)、\(r\) | W、r | 週數(\(W\))和零頭的天數(\(r\))。天數 \(D\) 除以 7 的商是 \(W\),餘數是 \(r\)。 |
| \(y\)、\(m\)、\(d\) | y、m、d(小寫) | 把期間分成「\(y\) 年 \(m\) 個月 \(d\) 天」時的各個部分。(例如 1 年 2 個月 10 天時,\(y = 1\)、\(m = 2\)、\(d = 10\)) |
| \(M\) | M(大寫) | 只用月份表示期間的總月數,用 \(M = 12y + m\) 求出。(例如 1 年 2 個月是 \(M = 14\) 個月) |
用語
| 日曆天 | 日曆上的每一天。不分平日、週末或國定假日都算進去的天數叫做日曆天,和扣除週末、國定假日的「工作天」不同。本頁計算的是日曆天。 |
| 始日不算入 | 計算期間時,第一天不算進去的原則。日期相減就是這種算法(開始日算第 0 天)。台灣民法第 120 條規定「以日、星期、月或年定期間者,其始日不算入」,例如「今天起 3 天內」要從明天開始算。重要的期限請確認契約或法規的實際寫法。 |
| 頭尾都算 | 開始日和結束日都算 1 天的算法,等於日期相減的答案加 1。用在吃藥的天數、租借期間、工程的工期等「那一天本身也會用到」的情況。 |
| 算頭不算尾 | 開始日和結束日只算其中一個的算法,答案和日期相減相同。銀行計算存款利息時常這樣算:存入那天算利息,提領那天不算。如果頭尾都不算,答案就是日期相減再減 1。 |
| 對應日 | 下個月或下一年的「同一個日期」。1 月 15 日的下個月對應日是 2 月 15 日。期間中零頭的月數,就是看有沒有到達這個日期來算。像 1 月 31 日這樣下個月沒有同一個日期時,就以該月的最後一天代替,在最後一天結束時算滿 1 個月。 |
| 閏年 | 有 2 月 29 日的年份。原則上 4 年 1 次,但能被 100 整除的年份是平年,能被 400 整除的年份才是閏年(2100 年是平年,2000 年是閏年)。本計算機照日曆計算,所以期間內有 2 月 29 日時會確實算作 1 天。 |
| 序列值 | Excel 和試算表用來管理日期的連續號碼。以 1900 年 1 月 1 日為 1,每過 1 天加 1(2025 年 1 月 1 日是 45658)。Excel 能直接把日期相減,就是因為日期的真面目是這個號碼。Excel 有一個舊的特殊情況:把實際上不存在的「1900 年 2 月 29 日」也算進去,所以序列值比真正的日曆天數多 1(不影響相減算出的天數)。 |
建議先了解的基礎知識
為了讓您「理解意義」地使用本頁的計算,這裡整理了事先了解會更好懂的基礎知識。
遇到不懂的地方,回頭複習這些內容是最快的方法。
| 日曆的規則(國小低~中年級,7~10 歲) |
|
| 減法直式(國小低~中年級,7~10 歲) |
|
| 有餘數的除法(國小中年級,8~10 歲) |
|
| 乘法直式(國小中年級,8~10 歲) |
|
用 Excel 計算的方法
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 天數(不算開始日) | =B2-B1 |
| 頭尾都算(開始日和結束日都算) | =B2-B1+1 |
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 週數 | =INT((B2-B1)/7) |
| 零頭的天數 | =MOD(B2-B1,7) |
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 年數 | =DATEDIF(B1,B2,"Y") |
| 零頭的月數 | =DATEDIF(B1,B2,"YM") |
| 零頭的天數 | =DATEDIF(B1,B2,"MD") |
| 總月數 | =DATEDIF(B1,B2,"M") |
| 過去的日期(紀念日等) | 2025/1/1 |
| 那天到今天的天數 | =TODAY()-B1 |
| 未來的日期(考試等) | 2027/1/16 |
| 今天到那天的天數(還有幾天) | =B3-TODAY() |
第三個表格的 DATEDIF 函數,第 3 個引數的意思是:「Y」=年數、「YM」=零頭的月數、「MD」=零頭的天數、「M」=總月數。(DATEDIF 不會出現在函數的輸入提示清單裡,但每個版本的 Excel 都能使用。)不過「MD」在月底附近(例如從 31 日開始時)已知會差 1~2 天,甚至出現奇怪的值。零頭的天數很重要時,請以本計算機的結果為準。
像第四個表格那樣使用 TODAY(),每次打開檔案,「到今天」「從今天起」的天數都會自動更新。
用 Google 試算表計算的方法
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 天數(不算開始日) | =B2-B1 |
| 頭尾都算(開始日和結束日都算) | =B2-B1+1 |
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 週數 | =INT((B2-B1)/7) |
| 零頭的天數 | =MOD(B2-B1,7) |
| 開始日 | 2025/1/1 |
| 結束日 | 2025/3/1 |
| 年數 | =DATEDIF(B1,B2,"Y") |
| 零頭的月數 | =DATEDIF(B1,B2,"YM") |
| 零頭的天數 | =DATEDIF(B1,B2,"MD") |
| 總月數 | =DATEDIF(B1,B2,"M") |
| 過去的日期(紀念日等) | 2025/1/1 |
| 那天到今天的天數 | =TODAY()-B1 |
| 未來的日期(考試等) | 2027/1/16 |
| 今天到那天的天數(還有幾天) | =B3-TODAY() |
和 Excel 一樣,相減的結果顯示成日期時,請把格式改成「數值」(格式 → 數值);DATEDIF 的「MD」在月底附近也可能會差 1~2 天。
用 Python 計算的方法
from datetime import date
start = date(2025, 1, 1) # 開始日
end = date(2025, 3, 1) # 結束日(算今天就用 date.today())
days = (end - start).days # 兩個日期相差的天數(不算開始日)
days_inclusive = days + 1 # 開始日和結束日都算(頭尾都算)
weeks, extra_days = divmod(days, 7) # 週數和零頭的天數
# 總月數:年份差 × 12 + 月份差。結束日的「日」比開始日的「日」早時,最後一個月還沒滿,所以減 1
total_months = (end.year - start.year) * 12 + (end.month - start.month) - (end.day < start.day)
print(f"天數:{days} 天(頭尾都算是 {days_inclusive} 天)")
print(f"週數:{weeks} 週又 {extra_days} 天")
print(f"總月數:{total_months} 個月")
用 LaTeX 等數學式語言的寫法(可直接複製)
D = N₂ − N₁
D = N_2 - N_1
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>D</mi><mo>=</mo>
<msub><mi>N</mi><mn>2</mn></msub><mo>−</mo>
<msub><mi>N</mi><mn>1</mn></msub>
</mrow>
</math>
D = N_2 - N_1
days = DateDifference[startDate, endDate, "Day"]
days := n2 - n1;
days_between = days(end_date - start_date);
D = N_2 - N_1
D′ = D + 1
D' = D + 1
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mi>D</mi><mo>′</mo></msup><mo>=</mo>
<mi>D</mi><mo>+</mo><mn>1</mn>
</mrow>
</math>
D' = D + 1
daysInclusive = days + 1
daysInclusive := days + 1;
days_inclusive = days_between + 1;
D' = D + 1
D = 7W + r (0 ≤ r ≤ 6)
D = 7W + r\ \ (0 \le r \le 6)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>D</mi><mo>=</mo>
<mn>7</mn><mi>W</mi><mo>+</mo><mi>r</mi><mspace width="0.7em"/>
<mo>(</mo><mn>0</mn><mo>≤</mo><mi>r</mi><mo>≤</mo><mn>6</mn><mo>)</mo>
</mrow>
</math>
D = 7W + r (0 <= r <= 6)
{weeks, remDays} = QuotientRemainder[days, 7]
weeks := iquo(days, 7); remDays := irem(days, 7);
num_weeks = floor(days_between/7); rem_days = mod(days_between, 7);
D = 7W + r (0 ≤ r ≤ 6)
M = 12y + m
M = 12y + m
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>M</mi><mo>=</mo>
<mn>12</mn><mi>y</mi>
<mo>+</mo><mi>m</mi>
</mrow>
</math>
M = 12y + m
totalMonths = 12*years + extraMonths
totalMonths := 12*years + extraMonths;
total_months = 12*num_years + extra_months;
M = 12y + m
請 ChatGPT 幫忙計算的方法
你是天數計算助理。請務必實際執行 Python 程式碼來進行以下計算,並且只根據執行結果的數值回答(不要用心算或推測回答)。 開始日是 2025 年 1 月 1 日,結束日是 2025 年 3 月 1 日。 請分別求出: 1. 兩個日期相差的天數(日期相減,開始日算第 0 天) 2. 開始日和結束日都算 1 天的天數(頭尾都算) 3. 把第 1 題的天數寫成「幾週又幾天」 請列出使用的程式碼和執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權