dsi
dsi

Reputation: 3359

How to find weeks between two dates

How to find week's starting date between two dates.

Example:

date1: 4th March 2014. 
date2: 18th March 2014. 

Then it should return list of weeks begining date as 2014-03-03, 2014-03-10, 2014-03-17

Upvotes: 0

Views: 819

Answers (2)

Tim Schmelter
Tim Schmelter

Reputation: 460058

So first you want to get the first day of the week of the start-date? This gives your desired list:

Dim firstDate = New Date(2014, 3, 4)
Dim daysToFirstDay As Int32 = DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek - firstDate.DayOfWeek
firstDate = firstDate.AddDays(daysToFirstDay) ' -1 day in this case
Dim lastDate = New Date(2014, 3, 17)
Dim days As Int32 = (lastDate - firstDate).Days + 1 ' including last

Dim result As List(Of Date) = Enumerable.Range(0, days).
    Select(Function(d) firstDate.AddDays(d)).
    Where(Function(day) day.DayOfWeek = DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek).
    ToList()

It's using LINQ to create a range of Dates between the start-and end-date. Then it uses the current DateTimeFormatInfo's FirstDayOfWeek property to return only week-starting days.

Upvotes: 2

Chalky
Chalky

Reputation: 1642

 Function GetWeekStartDates(startDate As Date, endDate As Date) As List(Of Date)
    Dim result As New List(Of Date)
    Dim checkDate = startDate
    Dim Is1stWeek As Boolean = True
    Do While checkDate <= endDate
        If checkDate.DayOfWeek = DayOfWeek.Monday Then
            result.Add(checkDate)
            If Is1stWeek Then Is1stWeek = False
        Else
            If Is1stWeek Then
                result.Add(checkDate.AddDays(-checkDate.DayOfWeek + 1))
                Is1stWeek = False
            End If
        End If
        checkDate = checkDate.AddDays(1)
    Loop
    Return result
End Function

Upvotes: 0

Related Questions