2013-07-08 8 views
2

Я искал функцию в VB.net, которая возвращает дату указанного дня недели данной недели в месяц , Нечто похожее на Outlook.Как получить первый, второй или последний вторник (или любой день недели) данного месяца

, например: первый понедельник месяца, Второй четверг месяца или Последняя суббота месяца

я искал, но не мог найти что-нибудь достаточно универсальным для всех вариантов. Поэтому я создал свою собственную и хотел бы поделиться ею.

+0

не кажется, что вы предоставили ответ. Если вы ответите на свой вопрос, я проголосовал за его повторное открытие. Для повторного открытия потребуется еще несколько голосов. –

+0

Проблема заключалась в том, что вы отправили код в вопрос. Вместо этого укажите код как ответ на свой вопрос. – Chris

+0

David Zemens: Я дал ответ как часть вопроса, но это сбивало с толку, поэтому я отредактировал вопрос и удалил код. –

ответ

1

Вот что я придумал:

Public Function GetDate() 

    Dim dt As Date = Today 

    Dim FirstWeek As Integer = 1 
    Dim SecondWeek As Integer = 2 
    Dim ThirdWeek As Integer = 3 
    Dim FourthWeek As Integer = 4 
    Dim LastWeek As Integer = 5 

    MsgBox(GetNthDayOfNthWeek(dt, DayOfWeek.Monday, LastWeek).ToString) 

End Function 

Public Function GetNthDayOfNthWeek(ByVal dt As Date, ByVal DayofWeek As Integer, ByVal WhichWeek As Integer) As Date 
    'specify which day of which week of a month and this function will get the date 
    'this function uses the month and year of the date provided 

    'get first day of the given date 
    Dim dtFirst As Date = DateSerial(dt.Year, dt.Month, 1) 

    'get first DayOfWeek of the month 
    Dim dtRet As Date = dtFirst.AddDays(6 - dtFirst.AddDays(-(DayofWeek + 1)).DayOfWeek) 

    'get which week 
    dtRet = dtRet.AddDays((WhichWeek - 1) * 7) 

    'if day is past end of month then adjust backwards a week 
    If dtRet >= dtFirst.AddMonths(1) Then 
     dtRet = dtRet.AddDays(-7) 
    End If 

    'return 
    Return dtRet 

End Function 

Наслаждайтесь!

1
Public Function GetLastDayOfMonth(ByVal iMonth As Integer, ByVal iYear As Integer) As Integer 
    Dim LastDate = DateSerial(iYear, iMonth + 1, 0) 
    GetLastDayOfMonth = LastDate.Day 

    Return GetLastDayOfMonth 
End Function 

Private Function GetWeekNumberOfMonth(ByVal Dt As Date) As Integer 
     Dim LastDate = New DateTime(Dt.Year, Dt.Month, GetLastDayOfMonth(Dt.Month, Dt.Year), Dt.Hour, Dt.Minute, Dt.Second, Dt.Kind) 
     Dim weekNumber As Integer = Math.Ceiling(Dt.Day/7) 
     If weekNumber = 4 Then 
      Dim dateDiff = CInt((LastDate - Dt).TotalDays) 
      If dateDiff < 7 Then weekNumber = 5 
     End If 

     Return weekNumber 
    End Function 
+0

Функция работает нормально! – Elian

+0

Ваш код не является полным без функции GetLastDayOfMonth. –

+0

Да, вы правы, мои извинения. – Elian

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