Day number in year

Brief description:

Returns the day number (ie how many days have passed in the year)

Full description:

Returns the day number (ie how many days have passed in the year).

This function totals the number of days that have passed by adding the days in each month and then adding the date of the current month. It makes suitable adjustments for leap years.

 

Code:
Option Explicit
Option Base 1

Function DayNumInYear()
'This function returns the day number in the year based on the
'   current date ie system time
'   (ie how many days have passed in the year so far)

'Define variables to be used
Dim YearNum As Integer, MonthNum As Integer, DayInMonth As Integer
Dim MonthIndex As Integer
Dim TempDayNum As Integer
Dim MaxDaysInMonth As Variant

'Set required variables
YearNum = Year(Date)
MonthNum = Month(Date)
DayInMonth = Day(Date)

'Adjust MaxDaysInMonth array to accomodate leap years. These values are added
'   to find the final day number.
'   Note: Performance could be improved by using the total day count in the
'       MaxDaysInMonth arrays rather than looping through but it is left
'       as is for clarity.
If (YearNum - 1900 Mod 4) = 0 Then
    MaxDaysInMonth = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
ElseIf (YearNum - 1900 Mod 4) <> 0 Then
    MaxDaysInMonth = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
ElseIf (YearNum - 1900 Mod 100) = 0 Then
    MaxDaysInMonth = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
End If

TempDayNum = 0 'Initialise variable used to store summed days

'Add the number of days in each of the previous months in the year
For MonthIndex = 1 To MonthNum - 1
    TempDayNum = TempDayNum + MaxDaysInMonth(MonthIndex)
Next MonthIndex
'Add the days passed in the current month
TempDayNum = TempDayNum + DayInMonth

'Return result
DayNumInYear = TempDayNum

End Function