VB.Net, DateDiff
需求: 計算2個日期差的年, 並依年做不同的事
原以為DateDiff + DateInterval.Year, 就可以交差了事
於是就寫了 DateDiff(DateInterval.Year, date1, date2)
測試後沒問題,上線後使用者回報有的case正常, 有的case異常
...於是就有了今天的這則帖子...
===== 我是分隔線 ====================================================
原來DateDiff, 只針對DateInterval做差異計算
DateInterval.Year, 則只會將2個日期的年拿出來做DateDiff
於是就發生了...2018/01/01 ~ 2018/08/01 ==>0
於是就發生了...2017/12/01 ~ 2018/08/01 ==>1
那用DateInterval.Month呢?
特別拿4年才遇到1次的閏年, 實測結果如下:
2016.02.15 ~ 2018.02.15 ==>預期2年, 結果2年
2016.02.29 ~ 2018.02.15 ==>預期1年, 結果2年
也就是說, DateDiff實則將2個日期的年月拿出來做計算
===== 我是分隔線 ====================================================
使用者需求是: 計算2個日期差的年, 並依年做不同的事
實際使用者的隱藏需求是: 滿1年才算1年, 未滿1年則不列入, 也就是要細到 [日] 這個項目
如: 2017/08/01 ~ 2018/08/01 滿1年
2016/08/02 ~ 2018/08/01 滿1年, 未滿2年
===== 解決方法 ======================================================
1. 將2個日期的年取出
Dim date1_yyyy As Integer = date1.Year
Dim date2_yyyy As Integer = date2.Year
2. 將2個日期的月日取出
Dim date1_mmdd As String = date1.ToString("MMdd")
Dim date2_mmdd As String = date2.ToString("MMdd")
3.年份相減
Dim year As Integer = date2_yyyy - date1_yyyy
4.若未滿1年, 則將年份再減1
If date1_mmdd > date2_mmdd Then
year -= 1
End If
5.結束
===== 總結 ==========================================================
原以為DateDiff會將2個日期計算出差距後, 依照我們所要求的DateInterval.Year, Month回傳Year或Month
實則DateInterval是用來決定要運用的對象是Year, 還是Month
真是誤會大了...