참조 DateDiff가 잘못 계산 :정확한 날짜 차이는
DateDiff("m", "30/06/2011", "24/06/2012") will return 12
그러나 실제 차이는 11 월 25 일
때문에 내가 11을 반환해야어쩌면 누군가는이 질문에
에 대한 구체적인 해결책을 가지고 있습니다나를 위해 이상적인 것 : 11 개월 25 일
참조 DateDiff가 잘못 계산 :정확한 날짜 차이는
DateDiff("m", "30/06/2011", "24/06/2012") will return 12
그러나 실제 차이는 11 월 25 일
때문에 내가 11을 반환해야어쩌면 누군가는이 질문에
에 대한 구체적인 해결책을 가지고 있습니다나를 위해 이상적인 것 : 11 개월 25 일
위의 맞춤 기능보다 더 깨끗한 해결책이 있습니다. 주로 내장 된 DateDiff 함수를 사용하지만 반올림하면 답변을 조정합니다. 첫 번째 날짜가 두 번째 날짜보다 늦 더라도 필자의 함수는 차이점을 제공하고 선택적으로 그렇게 말하는 텍스트를 추가 할 수도 있습니다.
Function YearsMonthsDays(Date1 As Date, _
Date2 As Date, _
Optional ShowAll As Boolean = False, _
Optional Grammar As Boolean = True, _
Optional MinusText As String = "Minus " _
) As String
Dim dTempDate As Date
Dim iYears As Integer
Dim iMonths As Integer
Dim iDays As Integer
Dim sYears As String
Dim sMonths As String
Dim sDays As String
Dim sGrammar(-1 To 0) As String
Dim sMinusText As String
If Grammar = True Then
sGrammar(0) = "s"
End If
If Date1 > Date2 Then
dTempDate = Date1
Date1 = Date2
Date2 = dTempDate
sMinusText = MinusText
End If
iYears = DateDiff("yyyy", Date1, Date2)
Date1 = DateAdd("yyyy", iYears, Date1)
If Date1 > Date2 Then
iYears = iYears - 1
Date1 = DateAdd("yyyy", -1, Date1)
End If
iMonths = DateDiff("M", Date1, Date2)
Date1 = DateAdd("M", iMonths, Date1)
If Date1 > Date2 Then
iMonths = iMonths - 1
Date1 = DateAdd("m", -1, Date1)
End If
iDays = DateDiff("d", Date1, Date2)
If ShowAll Or iYears > 0 Then
sYears = iYears & " year" & sGrammar((iYears = 1)) & ", "
End If
If ShowAll Or iYears > 0 Or iMonths > 0 Then
sMonths = iMonths & " month" & sGrammar((iMonths = 1)) & ", "
End If
sDays = iDays & " day" & sGrammar((iDays = 1))
YearsMonthsDays = sMinusText & sYears & sMonths & sDays
End Function
당신은 순수한 DateDiff
으로 그것을 얻지 못할 것입니다. 당신은 또한 (결국 하나의 F)와 DateDif
기능이 좀 걸릴 수 있습니다
0 years, 1 months, 1 days
:이 custom made function를 사용하는 경우, 당신은 당신이 원하는 방식으로 원하는 결과를 얻을. 종료일의 시작일보다 적은 일수가있는 경우 DateDif()가 예상치 못한 결과 (예 : 음수 일 수 있음)를 제공한다는 사실을 기억하십시오.