View Full Version : Count Weekdays Between 2 Dates


eckert1961
03-04-2009, 09:28 AM
Hello,

I'm using the following code to calculate the number of Monday's and Wednesday's in a selected month.

Public Function GetWeekDays(pmoyr As String, pdays As String) As Integer
'************************************************
'Purpose: Compute number of weekdays
' in the specified mm/yyyy
' where 1 = Sunday thru 7 = Saturday
'Coded by: raskew
'Inputs: 1) ? GetWeekdays("02/2008", "2") 'count Mondays
' 2) ? GetWkdays("07/2008", "246") 'count Mondays, Wednesdays, Fridays

'Output: 1) 5
' 2) 13
'************************************************

Dim dteStart As Date
Dim dteEnd As Date
Dim intEnd As Integer
Dim intStart As Integer
Dim i As Integer

dteStart = DateValue(pmoyr)
dteEnd = DateAdd("m", 1, dteStart) - 1

For i = 1 To Len(pdays)
intStart = intStart + IIf(Weekday(dteStart) <= Int(Mid(pdays, i, 1)), 1, 0)
Next i

For i = 1 To Len(pdays)
intEnd = intEnd + IIf(Int(Mid(pdays, i, 1)) <= Weekday(dteEnd), 1, 0)
Next i

GetWeekDays = intStart + Len(pdays) * (DateDiff("ww", dteStart, dteEnd) - 1) + intEnd

End Function
This works great but I would like to modify it so that along with what it already does I have the option of calculating the number of Monday's and Wednesday's between 2 dates.

Any assistance would be greatly appreciated.

Thanks and regards,
Chris

MSAccessRookie
03-04-2009, 10:02 AM
Hello,

I'm using the following code to calculate the number of Monday's and Wednesday's in a selected month.

Public Function GetWeekDays(pmoyr As String, pdays As String) As Integer
'************************************************
'Purpose: Compute number of weekdays
' in the specified mm/yyyy
' where 1 = Sunday thru 7 = Saturday
'Coded by: raskew
'Inputs: 1) ? GetWeekdays("02/2008", "2") 'count Mondays
' 2) ? GetWkdays("07/2008", "246") 'count Mondays, Wednesdays, Fridays

'Output: 1) 5
' 2) 13
'************************************************

Dim dteStart As Date
Dim dteEnd As Date
Dim intEnd As Integer
Dim intStart As Integer
Dim i As Integer

dteStart = DateValue(pmoyr)
dteEnd = DateAdd("m", 1, dteStart) - 1

For i = 1 To Len(pdays)
intStart = intStart + IIf(Weekday(dteStart) <= Int(Mid(pdays, i, 1)), 1, 0)
Next i

For i = 1 To Len(pdays)
intEnd = intEnd + IIf(Int(Mid(pdays, i, 1)) <= Weekday(dteEnd), 1, 0)
Next i

GetWeekDays = intStart + Len(pdays) * (DateDiff("ww", dteStart, dteEnd) - 1) + intEnd

End Function
This works great but I would like to modify it so that along with what it already does I have the option of calculating the number of Monday's and Wednesday's between 2 dates.

Any assistance would be greatly appreciated.

Thanks and regards,
Chris

Believe it or not, you already have your answer.

Your code already finds the target dates between a starting date (dteStart = DateValue(pmoyr)) and an ending date dteEnd = (DateAdd("m", 1, dteStart) - 1).

All you should need to do is change the Function to pass a starting and ending date as a parameter instead of calculating them.
Public Function GetWeekDays(dteStart As Date, dteEnd As Date, pdays As String) As Integer
'************************************************
'Purpose: Compute number of weekdays
' between two supplied dates
' where 1 = Sunday thru 7 = Saturday
'Based on code supplied by: raskew
'Inputs: 1) ? GetWeekdays("02/2008", "2") 'count Mondays
' 2) ? GetWkdays("07/2008", "246") 'count Mondays, Wednesdays, Fridays

'Output: 1) 5
' 2) 13
'************************************************

' no longer needed - changed to a parameter
'
' Dim dteStart As Date
' Dim dteEnd As Date

Dim intEnd As Integer
Dim intStart As Integer
Dim i As Integer

' no longer needed - changed to a parameter
'
' dteStart = DateValue(pmoyr)
' dteEnd = DateAdd("m", 1, dteStart) - 1

For i = 1 To Len(pdays)
intStart = intStart + IIf(Weekday(dteStart) <= Int(Mid(pdays, i, 1)), 1, 0)
Next i

For i = 1 To Len(pdays)
intEnd = intEnd + IIf(Int(Mid(pdays, i, 1)) <= Weekday(dteEnd), 1, 0)
Next i

GetWeekDays = intStart + Len(pdays) * (DateDiff("ww", dteStart, dteEnd) - 1) + intEnd

End Function

eckert1961
03-04-2009, 10:36 AM
Thanks for the response but unfortunately I need more detailed information.

All you should need to do is change the Function to pass a starting and ending date as a parameter instead of calculating them.

How would I go about changing the Function?

Regards,
Chris

MSAccessRookie
03-04-2009, 10:52 AM
Thanks for the response but unfortunately I need more detailed information.



How would I go about changing the Function?

Regards,
Chris

I am not sure what you mean. The revised Function was included in my previous post.

eckert1961
03-04-2009, 11:31 AM
This time I read your 1st reply with both eyes open and actually saw what you did. To test the revised function I entered the following into the immediate window and got the desired result.

? GetDays ("01-Jan-2009","31-Mar-2009","46")
25

Thanks so much.

Chris

MSAccessRookie
03-04-2009, 12:08 PM
This time I read your 1st reply with both eyes open and actually saw what you did. To test the revised function I entered the following into the immediate window and got the desired result.

? GetDays ("01-Jan-2009","31-Mar-2009","46")
25

Thanks so much.

Chris


The pleasure was all mine. Glad that you were able to resolve your issue, and apologies for any confusion that my earlier post presented.