2

DateDiff の計算が正しくありません:

DateDiff("m", "30/06/2011", "24/06/2012") will return 12

しかし、実際の差は 11 か月と 25 日であるため、11 を返す必要があります。

多分誰もがこの質問に対する特定の解決策を持っています

それは私にとって理想的です: 11ヶ月と 25

4

2 に答える 2

3

上記のカスタムメイド関数よりもクリーンなソリューションを次に示します。ほとんどの場合、組み込みの DateDiff 関数が使用されますが、切り上げられた場合は回答が調整されます。私の関数は、最初の日付が 2 番目の日付よりも遅い場合でも違いを示し、オプションでそのことを示すテキストを追加します。

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
于 2012-06-24T16:48:12.817 に答える
0

pure では得られませんDateDiff。このカスタムメイドの関数を使用すると、次のように希望どおりの結果が得られます。

0 years, 1 months, 1 days

DateDif関数を a (最後に単一の f) で見ることもできます。DateDif() は、終了月の日数が開始月よりも少ない場合でも、予期しない結果 (つまり、負の日数) を返すことに注意してください。

于 2012-06-24T13:22:12.893 に答える