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从给定的日期创建一个,然后在该日期之后一个月和之前一个月创建两个周围的日期。这个数组将从今天(TimeSpan.Duration)开始的正时间跨度中排序。所以数组中的第一个日期是最接近正确月份的日期。

于 2013-07-30T22:07:38.013 回答