VB.NET - 给定一个日期,我怎样才能得到过去四个星期五的日期?

时间:2015-07-22 09:28:35

标签: vb.net date

鉴于今天的日期想要获得过去四周每个星期五的日期。

5 个答案:

答案 0 :(得分:3)

这是一种简单的LINQ方法:

Dim today = Date.Today
Dim lastFridays = From d In Enumerable.Range(0, Int32.MaxValue)
                  Let dt = today.AddDays(-d)
                  Where dt.DayOfWeek = DayOfWeek.Friday
                  Select dt
Dim lastFourFridays As Date() = lastFridays.Take(4).ToArray()

由于它不是最有效的方法,因此这是一个仍然可读和可维护的查询,但只搜索第一个星期五,然后每隔7天搜索一次:

Dim lastFriday = lastFridays.First()  ' reuse of above query '
Dim fridays = From d In Enumerable.Range(0, Int32.MaxValue)
              Let dt = lastFriday.AddDays(-d * 7)
              Select dt
Dim lastFourFridays As Date() = fridays.Take(4).ToArray()

答案 1 :(得分:1)

这是我的方式:

Function Last4Friday(ByVal StartDate As Date) As array
    Dim L4F()
    Dim mDate as date = StartDate
    For value As Integer = 1 To 7
        mDate = mDate.AddDays(-1)
        If mDate.DayOfWeek = DayOfWeek.Friday Then
        L4F = {mDate, mDate.AddDays(-7), mDate.AddDays(-14), mDate.AddDays(-21)}
        exit for
    End If
    Next
Return L4F

End Function

编辑:如果您需要检查插入的日期,并且希望它在数组中返回,您可以使用:

Dim mDate as date = StartDate.AddDays(1)

而不是

Dim mDate as date = StartDate

答案 2 :(得分:1)

试试这个。它没有使用循环来查找星期五的开始。

set style line 3  lc rgb '#4682B4' pt 9 ps 0.65

所有其他建议都使用循环来查找星期五的开始。如果不经常使用此代码,那么确定起始星期五的方式可能并不重要。

编辑:作为功能

        Dim someDate As DateTime = DateTime.Now

        If someDate.DayOfWeek <> DayOfWeek.Friday Then
            'do the math to get a Friday
            someDate = someDate.AddDays(DayOfWeek.Friday - someDate.AddDays(1).DayOfWeek - 6)
        End If

        Dim last4Fridays As New List(Of DateTime) From {someDate, someDate.AddDays(-7), someDate.AddDays(-14), someDate.AddDays(-21)}

答案 3 :(得分:1)

如果 specifiedDate 日期星期五,您可以使用此日期返回此类日期的列表并排除该日期:

Public Shared Function GetLastFourFridays(specifiedDate As DateTime) As List(Of DateTime)
    Dim dtm As New List(Of DateTime)()
    Dim dt As DateTime = specifiedDate
    For i As Integer = 0 To 6
        dt = dt.AddDays(-1)
        If dt.DayOfWeek = DayOfWeek.Friday Then
            dtm.Add(dt)
            Exit For
        End If
    Next
    dtm.Add(dt.AddDays(-7))
    dtm.Add(dt.AddDays(-14))
    dtm.Add(dt.AddDays(-21))

    Return dtm
End Function

以及您使用它的方式是:

Dim dtm As List(Of DateTime) = GetLastFourFridays(DateTime.Now)

For Each d As var In dtm
    Console.WriteLine(String.Format("Date: {0}, Day: {1}", d.ToString(), [Enum].Parse(GetType(DayOfWeek), d.DayOfWeek.ToString())))
Next

答案 4 :(得分:0)

这个功能不需要通过它今天的日期,并从今天起到最后四个星期五。可以改变它来获得一周中的任何一天。

    Dim todaysDate As Date = Date.Today
    Dim oldDay As Integer
    Dim thisWeek As Date

    Dim firstWeek As Date
    Dim secondWeek As Date
    Dim thirdWeek As Date
    Dim fourthWeek As Date


    'finds the Friday of the end of the current week No mattter what day you are working

    Dim daycount As Integer
    'use this to check specific dates "Dim datetime As New DateTime(2015, 4, 13)"
    oldDay = Weekday(todaysDate)
    thisWeek = todaysDate

    If oldDay < 6 Then
        daycount = 6 - oldDay
        thisWeek = thisWeek.AddDays(+daycount)
    ElseIf oldDay > 6 Then
        daycount = oldDay - 6
        thisWeek = thisWeek.AddDays(-daycount)
    End If

    Dim currentDate As Date = Now
    Do While Not currentDate.DayOfWeek = DayOfWeek.Friday
        currentDate = currentDate.AddDays(-1)
    Loop

    fourthWeek = currentDate.AddDays(-21)
    thirdWeek = currentDate.AddDays(-14)
    secondWeek = currentDate.AddDays(-7)
    firstWeek = currentDate