2013-07-30 39 views
1

我的用戶通常會輸入一些行程信息,包括日期和月份,但通常他們只是輸入一天。例如,他們將輸入"TRIP1500/31",其中31表示它在7月份。旅行日期最多可以是過去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

所以+/- 7天是最大差距? –

+0

我不完全明白你在問什麼。你在問如何找到當前日期,並從中增加或減少7天? –

+0

如果用戶輸入的日期不是今天的+/- 7天,該怎麼辦?您是否正在進行驗證以防止在此案例聲明之前進行驗證,或者您是否計劃使用此案例聲明,您將合併該聲明? – 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

相關問題