TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
 Specialized Dev Zones Research Center eBook Library .NET Java C++ Web Dev Architecture Database Security Open Source Enterprise Mobile Special Reports 10-Minute Solutions DevXtra Blogs Slideshow

By submitting your information, you agree that devx.com may send you DevX offers via email, phone and text message, as well as email offers about other products and services that DevX believes may be of interest to you. DevX will process your information in accordance with the Quinstreet Privacy Policy.

Language: VB6
Expertise: beginner
Nov 18, 2002

### WEBINAR:On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning

# Monday - retrieving the date of the Monday for a specified week

``````' Return the date of the Monday for a specified week..
' This function can be tweaked to return any weekday. I use it in Access to
' subdivide reports into weekly units, since Access displays only a number
' between 1 and 53 for the week when you group dates by week.
'
' Note: the Monday function requires the presence of the IsLeapYear function,
' as well as the two arguments for the year and the week.

Public Function Monday(intYear As Integer, intWeek As Integer) As Date
Static intMonday(53) As Date
Dim i As Long, x As Integer
Dim datDayNum As Date
Dim intNumDays As Integer

If IsLeapYear(intYear) Then
intNumDays = 365
Else
intNumDays = 364
End If

datDayNum = DateSerial(intYear, 1, 1)

If WeekDay(datDayNum) >= 3 And WeekDay(datDayNum) <= 6 Then
For i = datDayNum - 7 To datDayNum + intNumDays
If WeekDay(i) = 2 Then
x = x + 1
intMonday(x) = CDate(i)
End If
Next
Else
For i = datDayNum To datDayNum + intNumDays
If WeekDay(i) = 2 Then
x = x + 1
intMonday(x) = CDate(i)
End If
Next
End If
' And finally:
Monday = intMonday(intWeek)
End Function

' This relatively simple function should work fine for any year between 100 and
' 9999,  using the Gregorian calendar.
' As you can see, it tests the year for whether it is a multiple of 4, 100,
'  or 400, using the Mod operator. It does not allow for years that VB can't
' handle.

Public Function IsLeapYear(intYear As Integer) As Boolean
' Multiples of 100 that are not also multiples of 400 are not leap years;
' thus, 1900 was not, but 2000 was.

If intYear < 100 Or intYear > 9999 Then
MsgBox "The year provided must be between 100 and 9999, inclusive."
Exit Function
End If

If intYear Mod 400 = 0 Then
IsLeapYear = True
ElseIf intYear Mod 100 = 0 Then
IsLeapYear = False
ElseIf intYear Mod 4 = 0 Then
IsLeapYear = True
Else
IsLeapYear = False
End If
End Function
``````
Mr. Collins

 Submit a Tip Browse "XML" Tips Browse All Tips
Comment and Contribute

(Maximum characters: 1200). You have 1200 characters left.

Thanks for your registration, follow us on our social networks to keep up-to-date