1

私のユーザーは通常、日と月を含む旅行情報を入力しますが、通常は日を入力するだけです。たとえば"TRIP1500/31"、31 が 7 月であることを暗示している場所に入力します。旅行の日付は、過去 7 日間以内、または将来 7 日間以内にすることができます。だから今私がやろうとしているのは、その日が何月になるのかを推測することです. これまでのところ、私は持っています:

Dim diff As Integer = CInt(tripDay) - Date.Now.Day
Select Case diff
    Case 0
        'same day so its probably current month
End Select

私が困っているのは、現在の日と旅行日が月ごとに重なる他のケースです。現在の日と旅行日が当月の場合、最大の違いは +/-7 日ですが、他の場合はどうでしょうか。どんな助けでも感謝します。

4

2 に答える 2

2
Function GetTripDate(day As Integer) As Date

    Dim today As Date = Date.Today

    For i As Integer = -7 To 7
        Dim dt As Date = today.AddDays(i)
        If dt.Day = day Then Return dt
    Next

    Throw New ArgumentOutOfRangeException("Invalid trip day.")

End Function
于 2013-07-30T22:07:38.880 に答える
1

これにより、指定された日に最も近い日付の日付 (月を含む) が得られます。

Dim maxDiffDays = 7
Dim tripDay = 31
Dim today = Date.Today
Dim tripDate = New Date(today.Year, today.Month, tripDay)
Dim tripDates = {tripDate.AddMonths(-1), tripDate, tripDate.AddMonths(1)}
Array.Sort(Of Date)(tripDates, Function(d1, d2) ((today - d1).Duration).CompareTo((today - d2).Duration))
Dim nearestDate = tripDates.First()
If ((today - nearestDate).Days <= maxDiffDays) Then
    Console.WriteLine("Nearest month for trip date is: " & nearestDate.Month)
End If

Date特定の日から を作成し、この日付の 1 か月後と 1 か月前の 2 つの周囲の日付を作成します。この配列は、today( TimeSpan.Duration) からの正のタイムスパンからソートされます。したがって、配列内の最初の日付は、正しい月の最も近い日付です。

于 2013-07-30T22:07:38.013 に答える