breekoy
breekoy

Reputation: 128

How to get the starting date based on week number in vb6?

How can I convert the week number to the starting date of that week? Example: week 41 to October 9, 2016? The date must also depend on the year. Example: For the year 2017, week 41 must equal to October 8.

I've already searched and found this (How to get starting date in a Week based on week number using vb.net?) but it is for vb.net. I am not sure if this is applicable in vb6. If this does not work in vb6, how can I do it?

Thanks :)

Upvotes: 3

Views: 1692

Answers (2)

Jim Hewitt
Jim Hewitt

Reputation: 1792

Try this:

Private Sub Form_Load()

    Dim d As Date

    d = GetWeekStartDate(41, 2016)
    MsgBox d
    d = GetWeekStartDate(41, 2017)
    MsgBox d

End Sub

Private Function GetWeekStartDate(weekNumber As Integer, year As Integer) As Date

    Dim startDate As Date
    Dim day As Integer

    startDate = DateSerial(year, 1, 1)
    day = Weekday(startDate, vbSunday)
    startDate = DateAdd("d", DaysToAdd(day), startDate)

    GetWeekStartDate = DateAdd("ww", weekNumber - 1, startDate)

End Function

Private Function DaysToAdd(day As Integer) As Integer

    DaysToAdd = 0
    If day > 1 Then DaysToAdd = 7 - day + 1

End Function

Upvotes: 4

Bob77
Bob77

Reputation: 13267

You can simplify this if you don't need all of the options, but it looks about right:

Option Explicit

Private Function WeekDate( _
    ByVal Year As Long, _
    ByVal Week As Long, _
    Optional ByVal FirstWholeWeekIs1 As Boolean, _
    Optional ByVal FirstDayOfWeek As VbDayOfWeek = vbUseSystemDayOfWeek) As Date

    Dim YearDate As Date
    Dim WeekdayOffset As Long
    Dim WeekOffset As Long

    YearDate = DateSerial(Year, 1, 1)
    WeekdayOffset = Weekday(YearDate, FirstDayOfWeek) - 1
    If WeekdayOffset <> 0 Then
        YearDate = DateAdd("d", -WeekdayOffset, YearDate)
        WeekOffset = IIf(FirstWholeWeekIs1, 0, 1)
    Else
        WeekOffset = 1
    End If
    WeekDate = DateAdd("ww", Week - WeekOffset, YearDate)
End Function

Private Sub Form_Load()
    Dim Year As Long
    Dim Week As Long

    AutoRedraw = True

    Year = 2015
    Week = 1
    Print Year, Week, WeekDate(Year, Week)
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
    Week = 2
    Print Year, Week, WeekDate(Year, Week)
    Print Year, Week, WeekDate(Year, Week, FirstDayOfWeek:=vbMonday)
    Year = 2016
    Week = 41
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
    Year = 2017
    Week = 1
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=False)
    Print Year, Week, WeekDate(Year, Week, FirstWholeWeekIs1:=True)
End Sub

If not quite right I'm sure you could make adjustments.

Upvotes: 1

Related Questions