2013-07-30 2 views
1

Мой пользователь обычно вводит информацию о поездке, включая день и месяц, но обычно они просто вводят день. Например, они будут вводить "TRIP1500/31", где 31 подразумевает, что это в ИЮЛЕ. Дата поездки может быть не более 7 дней в прошлом или 7 дней в будущем. Итак, теперь я пытаюсь понять, какой месяц этот день должен быть. До сих пор у меня есть:VB.NET Сделайте дату из одного дня

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

Что у меня возникают проблемы с это другими случаями, когда текущий день и поездкой дня перекрытия месяца к месяцу. Если текущий день и день поездки находятся в текущем месяце, то наибольшая разница между ними может составлять +/- 7 дней, но как насчет других случаев? Любая помощь оценивается.

+0

So +/- 7 дней максимальная разница? –

+0

Я не совсем понимаю, что вы просите. Вы спрашиваете, как найти текущую дату и добавить или вычесть из нее 7 дней? –

+0

Что делать, если пользователь вводит день, который не превышает +/- 7 дней с сегодняшнего дня? Выполняете ли вы проверку, чтобы предотвратить это до утверждения этого случая или вы планируете использовать этот пример Case, который вы собираетесь включить? – Tomcat

ответ

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 
+0

Это интересный подход. Позвольте мне переварить логику. – sinDizzy

+0

Я думаю, мне нравится этот подход для его простоты, и я также могу настроить значения диапазона. большое спасибо. – sinDizzy

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

+0

Позвольте мне дать этот ход и сделать некоторые испытания. вернется с результатами – sinDizzy

+0

также отличный ответ. Благодарю. – sinDizzy

Смежные вопросы