VB.NET Сделать свидание из всего лишь день

Мой пользователь обычно вводит некоторую информацию о поездке, включая день и месяц, но обычно он просто вводит день. Например, они должны ввести "TRIP1500/31", где 31 означает, что это ИЮЛЬ. Дата поездки может быть максимум 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 дней, а как насчет других случаев? Любая помощь приветствуется.


person sinDizzy    schedule 30.07.2013    source источник
comment
То есть +/- 7 дней это максимальная разница?   -  person Tim Schmelter    schedule 31.07.2013
comment
Я не совсем понимаю, о чем вы спрашиваете. Вы спрашиваете, как найти текущую дату и добавить или вычесть из нее 7 дней?   -  person Chase Ernst    schedule 31.07.2013
comment
Что делать, если пользователь вводит день, который не +/- 7 дней от сегодняшнего дня? Вы выполняете проверку, чтобы предотвратить это перед этим оператором Case, или вы планируете использовать этот оператор Case, который вы собираетесь включить?   -  person Tomcat    schedule 31.07.2013
comment
Я спрашиваю, как угадать, в каком месяце день. в этом случае 31. но это может быть любой день в пределах 7 дней от текущей компьютерной даты.   -  person sinDizzy    schedule 31.07.2013


Ответы (2)


Это дает вам дату (включая месяц) ближайшей даты с данным днем:

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). Таким образом, первая дата в массиве — это ближайшая дата с правильным месяцем.

person Tim Schmelter    schedule 30.07.2013
comment
Позвольте мне дать этому шанс и провести некоторые испытания. вернусь с результатами - person sinDizzy; 31.07.2013

person    schedule
comment
Это интересный подход. Позвольте мне переварить логику. - person sinDizzy; 31.07.2013
comment
Я думаю, что мне нравится этот подход за его простоту, и я также могу настроить значения диапазона. огромное спасибо. - person sinDizzy; 31.07.2013