2011-06-27 17 views

回答

3
Dim someDate As DateTime = ... 'input date 
Dim nextFriday As DateTime = someDate 
While nextFriday.DayOfWeek <> DayOfWeek.Friday 
    nextFriday = nextFriday.AddDays(1) 
End While 

Console.WriteLine(nextFriday) 
+0

不需要是循环 – dbasnett

8
Dim NextFriday as Date= GetNext(DayOfWeek.Friday) 

Function GetNext(ByVal d As DayOfWeek, Optional ByVal StartDate As Date = Nothing) As Date 
    If StartDate = DateTime.MinValue Then StartDate = Now 
    For p As Integer = 1 To 7 
     If StartDate.AddDays(p).DayOfWeek = d Then Return StartDate.AddDays(p) 
    Next 
End Function 

编辑:更新的答案,让一个开始日期(可选)。

获得下周五:

Dim NextFriday As Date = GetNext(DayOfWeek.Friday) 

什么是下周五后15天从现在开始:

Dim AnotherFriday As Date = GetNext(DayOfWeek.Friday,now.addays(15)) 
+1

将它作为日期对象的扩展来获得更多乐趣。 – Stefan

+0

不需要循环 – dbasnett

+0

@dbasnett,聪明! – Stefan

7
' 
Public Function nextDOW(whDayOfWeek As DayOfWeek, _ 
         Optional theDate As DateTime = Nothing) As DateTime 
    'returns the next day of the week 
    If theDate = Nothing Then theDate = DateTime.Now 
    Dim d As DateTime = theDate.AddDays(whDayOfWeek - theDate.DayOfWeek) 
    Return If(d <= theDate, d.AddDays(7), d) 
End Function 
+0

我没有投票-1,但我认为d Stefan

+0

注意到并同意,已更正。循环回答起来投票,我的投票。得到爱是如此。 – dbasnett

+0

你有我的+1。 ;) 这是在行动中的“西方问题中最快的枪”。 (http://meta.stackexchange.com/questions/9731/fastest-gun-in-the-west-problem)。我想,随着时间的推移,你会得到更多的选票,并且会得到更正。 – Stefan

0

又一个变化与以上那些,只是没有循环:

Private Function GetFridayDate(StartingDate As Date, DayToGet As DayOfWeek, iDays As Integer) As Date 
     Return StartingDate.AddDays(iDays + (DayToGet - StartingDate.DayOfWeek)) 
End Function 

如何使用函数的示例n

Dim dtStartDate As Date 

dtStartDate = GetFridayDate(Now, DayOfWeek.Friday, -7) ' Last Week Friday 

dtStartDate = GetFridayDate(Now, DayOfWeek.Friday, 0) ' This Week Friday 

dtStartDate = GetFridayDate(Now, DayOfWeek.Friday, 7) ' Next Week Friday 

dtStartDate = GetFridayDate(Now, DayOfWeek.Friday, 14) ' Week after Next Friday 
相关问题