如何获得给定月份的第一,第二或上周二(或一周中的任何一天)

时间:2013-07-08 06:00:29

标签: vb.net

我在VB.net中寻找一个函数,它返回一个月内给定周的指定工作日的日期。类似于Outlook约会的东西。

例如: 本月的第一个星期一, 本月的第二个星期四或 本月最后一个星期六

我搜索但找不到任何通用的所有选项。所以我创建了自己的,并希望分享它。

2 个答案:

答案 0 :(得分:2)

以下是我提出的建议:

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 :(得分: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