VB.NET - Учитывая дату, как я могу получить дату следующей пятницы? - PullRequest
5 голосов
/ 27 июня 2011

Учитывая дату, как я могу получить дату следующей пятницы (или любого другого дня недели) в VB.NET в .NET Framework 2.0?

Ответы [ 4 ]

9 голосов
/ 27 июня 2011
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))
8 голосов
/ 27 июня 2011
'
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
3 голосов
/ 27 июня 2011
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 голосов
/ 09 марта 2016

Просто еще одно изменение, как указано выше, просто без цикла:

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

Пример использования функции

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
...