logo  How To find Day Of Week near Date
This Chapter
Date Functions
Advent
Bank Hol (UK)
Chinese Calendar
Easter
Easter-Orthodox
Epoch Dates
Hebrew Calendar
Iso-Week Calendar
Nearest Weekday
Week Of Month
Other Dates
Chapters
Home Page
Colours, RGB
Computer Specifications
Dates&Times
Disk Drives
Files
Folders
GPS and OS Ref
VB.Net Forms
Image Files
If & Select
List/Array
Mathematics
NuGet
Sound
String Functions
Sun and Moon
User Controls
Validation
DigitalDan Sites
My Other Sites
Contact Site

Note
Some pages
may contain
inaccuracies
Hits=5
These functions look for a specific Day Of Week near a date. E.g. What is first Thursday On or After 1 Jan 2000 or What is Nearest Sunday to 7 June 2025.
 
Get Date for a Day Of Week near Target Date

Private Shared Function DayOfWeek_Near_Date(DoW As DayOfWeek, Rule1 As NearestRule, dat As Date) As Date
 Dim KeyDate As Date
 Select Case Rule1
  Case NearestRule.Before_Date : KeyDate = dat.AddDays(-7)
  Case NearestRule.OnOrBefore_Date : KeyDate = dat.AddDays(-6)
  Case NearestRule.NearestTo_Date : KeyDate = dat.AddDays(-3)
  Case NearestRule.OnOrAfter_Date : KeyDate = dat
  Case NearestRule.After_Date : KeyDate = dat.AddDays(1)
 End Select
 Return KeyDate.AddDays((CInt(DoW) + 7 - CInt(KeyDate.DayOfWeek)) Mod 7)
End Function

Private Enum NearestRule
 Before_Date
 OnOrBefore_Date
 NearestTo_Date
 OnOrAfter_Date
 After_Date
End Enum
  
 
Get Date for a Weekday/Weekend near Target Date
Variations of this function can be useful when calculating Public Holiday Dates. E.g. In the UK, the date of any Public Holiday that would normally fall on a Weekend is adjusted to the first Weekday after the normal date.
 

Private Shared Function WeekDay_OnOrAfter_Date(dat As Date) As Date
 Select Case dat.DayOfWeek
  Case DayOfWeek.Saturday : dat = dat.AddDays(2)
  Case DayOfWeek.Sunday : dat = dat.AddDays(1)
 End Select
 Return dat
End Function

Private Function WeekDay_OnOrBefore_Date(dat As Date) As Date
 Select Case dat.DayOfWeek
  Case DayOfWeek.Saturday : dat = dat.AddDays(-1)
  Case DayOfWeek.Sunday : dat = dat.AddDays(-2)
 End Select
 Return dat
End Function

Private Function Weekend_OnOrAfter_Date(dat As Date) As Date
 Select Case dat.DayOfWeek
  Case DayOfWeek.Monday : dat = dat.AddDays(5)
  Case DayOfWeek.Tuesday : dat = dat.AddDays(4)
  Case DayOfWeek.Wednesday : dat = dat.AddDays(3)
  Case DayOfWeek.Thursday : dat = dat.AddDays(2)
  Case DayOfWeek.Friday : dat = dat.AddDays(1)
 End Select
 Return dat
End Function

Private Function Weekend_OnOrBefore_Date(dat As Date) As Date
 Select Case dat.DayOfWeek
  Case DayOfWeek.Monday : dat = dat.AddDays(-1)
  Case DayOfWeek.Tuesday : dat = dat.AddDays(-2)
  Case DayOfWeek.Wednesday : dat = dat.AddDays(-3)
  Case DayOfWeek.Thursday : dat = dat.AddDays(-4)
  Case DayOfWeek.Friday : dat = dat.AddDays(-5)
 End Select
 Return dat
End Function
  
 

DigitalDan.co.uk