請見下圖....
公式是...
<pre class="c" name="code">=TEXT(INT((A2-A1)/365),"#")&"年"&TEXT(INT(MOD((A2-A1), 365)/30), "#") & "月"&TEXT(MOD(MOD((A2-A1), 365), 30), "#") & "日"
應該還有更好的解法...目前只想到這個...
A1: 2009/1/1
B1: 2011/5/3
C1 =Year(B1-A1)-1900 ...年
D1 =Month(B1-A1)....月
E1 =Day(B1-A1)....日
(如果顯示日期,請將格式改成數字)
131443提到:
2009年1月1日至2011年5月3日
請直接在儲存格輸入...
<pre class="c" name="code">
=IF(A2-A1<30,TEXT("00年00月"&INT(A2-A1)&"日","#"),TEXT(A2-A1-30,"[DBNum3][$-404]yy年mm月dd日"))
希望合用~~~
這個問題在我要計算員工年資(年月日)時確實也困擾了我很久,以小弟我這半瓶水的功力來看,我認為用一個公式是不太可能做得到的。(4個月30天/4個月31天,那一個要進化為5個月0天?別忘了,這是在算年資,跟大小月已經沒有直接關係了)
不過我注意到樓主好像跟我一樣放棄了要計算到"日"的要求,所以我提供一下我的做法。
第一步:先建立一組閏年的對照表(sheet)做參考。
第二步:將二個日期相減,再減去期間閏年的天數=A。(利用參照的方式,不難,可以自己試一下)
第三步:rounddown(A/365,0)=B....年數
第四步:rounddown(abs(rounddown(A/365,0)-(A/365))*12,0)=C....月數
如此,年月都算出來了,再把某些過程欄(或列)隱藏起來,就很漂亮了!
希望對你有用!
我個人感覺喔 , 如果原樓主想要的是一般用途 , 也就是兩個日期間的差距天數 (換算成幾年幾月又幾日) , 跟換算"年資" , 是不一樣的
比如 , 從 1/1 到 3/1 日 , 我們在講年資一定是說為 2 個月又0 天
但 如果是以天數 , 只等於 59 天(因為2月只有28天) , 是有差距的
所以 你現提供的這個 , 可以滿足樓主的提問 , 但不能滿足 "年資" 的算法
個人淺見
感謝showjack的指教,其實我一開始時也就是想強調二個日期的相減,基本上應該已經跟大小月沒有關係了,此時算到"天"是沒什麼意義的!不過在看到了許多高手的解法之後,也才知道原來不是直接用相減的方式來處理,來這兒真是不錯!
至於年資的算法,敝公司則確實是依我上面的計算方式來處理的,您指出的問題,我也確實沒考慮到,還好到現在都還沒有人來反應這個問題,希望在這個問題中,我也可以學到解決的辦法囉!謝謝!
參考看看
假設起始日期在A1結束日期在A2
A1:2000/10/10
A2:2010/11/01
="差距:"&DATEDIF(A1,A2,"Y")&"年"&DATEDIF(A1,A2,"YM")&"月"&DATEDIF(A1,A2,"MD")&"日"
顯示結果為:差距:10年1月1日
其中要注意的是來日期的部份必須是要日期格式才可以不然計算錯誤。
"Y" 指定計算年
"YM"指定計算月排除年與日
"MD"指定計算日排除年與月
其它參數請參考:Lotus
但這個函數有些問題
你去試一下 2011/1/31 與 2011/7/1 , 及 2011/2/1 與 2011/7/1
會發覺 都是 0/5/0
而且參數 "Y", "YM" , "MD" , ..... 代表的意義很難記耶
且 excel 插入函數的清單中沒有此一函數 (我本來也想用它 但找不到 )
使用時也沒引像別的函數打了 XXXX( 之後會跳出引導
有點給他難用呢
因為EXCEL是以30天為基數,而二月份不滿三十天就會出現這個狀況
DATEDIF只能函數只能死記,如同SHOWJACK說的函數清單數真的找不到他也不會出現自動提示。
http://ithelp.ithome.com.tw/question/10101146
Datedif函數的詳細作法。搜尋也很容易找到其他說明。
代碼一點都不會難記啊!?
計算單位代碼(資料型態是文字,直接寫在運算式中記得加""):
y:計算兩個日期相差多少年整(去尾)
m:計算兩個日期相差多少個月整(去尾)
d:計算兩個日期相差多少天
ym:計算兩個日期相差「去掉整數年後的月數」
yd:計算兩個日期相差「去掉整數年後的天數」
md:計算兩個日期相差「去掉整數月後的天數」
數學運算
一、A-B=C;
二、即A-C=B;
三、所以B+C=A;
設起日期為B,迄日期為 A,差距日期為C
實際上無法用運算式來證明二及三。
證明二:A-C=B;迄日期-差距日期=起日期
證明三:B+C=A;起日期+差距日期=迄日期
每個人的答案,可能不會一樣,因此要將民曆習慣定義納入,也就是simon大說的,一個月以30天計算,當起日期B不足日要減迄日期A的月份時,一個月均以30天來算。這樣大家的答案才會相同,當然不能再去證明二跟三了。
<pre class="c" name="code">=TEXT(INT((B7-A7)/365),"#")&"年" & TEXT(INT( ( B7-A7) )/30 - INT((B7-A7)/365) *12,"#")&"月"
=DATEDIF((起始日儲存格-終止日儲存格),TODAY(),"y") & " Y, " & DATEDIF((起始日儲存格-終止日儲存格),TODAY(),"ym") & " M ", " & DATEDIF((起始日儲存格-終止日儲存格),TODAY(),"ymd") & " D "