Vba 以月和日为单位的确切日期差异

Vba 以月和日为单位的确切日期差异,vba,excel,Vba,Excel,DateDiff计算不正确: DateDiff("m", "30/06/2011", "24/06/2012") will return 12 但我需要返回11,因为真正的区别是11个月25天 也许有人对这个问题有具体的解决办法 这对我来说非常理想:11个月和25天,你不能用纯的DateDiff获得它。如果您使用此选项,您将获得您想要的结果,如: 0 years, 1 months, 1 days 您还可以使用a(最后是一个f)来查看函数。请注意,当结束月份的天数少于开始月份的天数时,Dat

DateDiff计算不正确:

DateDiff("m", "30/06/2011", "24/06/2012") will return 12
但我需要返回11,因为真正的区别是11个月25天

也许有人对这个问题有具体的解决办法


这对我来说非常理想:11个月和25天,你不能用纯的DateDiff获得它。如果您使用此选项,您将获得您想要的结果,如:

0 years, 1 months, 1 days

您还可以使用a(最后是一个f)来查看函数。请注意,当结束月份的天数少于开始月份的天数时,DateDif()仍然会给出一些意外的结果(即天数为负数)。

这里有一个比上述定制函数更干净的解决方案。大多数情况下,它使用内置的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