Reputation: 128
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
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
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