DateFunctions

By | 2002-06-01

Use this module to do many calculations concerning dates. I will maybe add a few more later on.
This module inlcudes the following Functions:
1. DayOfWeek (Returns the day of the week of a certain date)
2. DayOfYear (Returns the day of the year, eg. 31 December 1999 will be 365)
3. DaysBetween (Returns the amount of days between two dates)
4. DaysInMonth (Retruns the days in a specified month, eg. 29 in February 2000)
5. DaysInYear (Returns the days in a specific year, eg. 365 in 1999)
6. IsLeapYear (Returns whether a year is a leap year)
Come on in, and take a look!!

Original Author: Jan Botha

Inputs

All the functions have different input parameters.

Assumptions

Beginners will have to know how functions work. Basic knowledge, actually.

Returns

All the functions return something different

Code

'*************************************************
'*DATEFUNCTIONS                 *
'*                        *
'*By: Jan Botha                 *
'*eMail: c03jabot@prg.wcape.school.za      *
'*Date: Sunday, 19 September 1999        *
'*Inspired by David I Schneider's book,     *
'*  "An Introduction to Programming using   *
'*  Visual Basic 5.0 - Third Edition"     *
'*I only got one of the formulas out from his  *
'*book as well as the idea. As I programmed on  *
'*I got ideas for other functions too.      *
'*So here they are!               *
'*************************************************
Option Explicit
'This returns the day of the week of a certain date.
'It will only work with dates after 1582, because
'the calendar we use today was introduced then
Public Function DayOfWeek(ByVal Day As Integer, ByVal Month As Integer, ByVal Year As Integer) As String
  Dim w As Integer, wQuotient, wRemainder, int6
  
  If Month = 1 Then
    Month = 13
    Year = Year - 1
   ElseIf Month = 2 Then
    Month = 14
    Year = Year - 1
  End If
  
  int6 = 0.6 * (Month + 1)
  int6 = Int(int6)
  'I got this formula from David I Schneider's book
  '"An Introduction to Programming using Visual Basic 5.0 - Third Edition"
  w = Day + 2 * Month + int6 + Year + Int(Year / 4) - Int(Year / 100) + Int(Year / 400) + 2
  wQuotient = Int(w / 7)
  DayOfWeek = DayString(w - (wQuotient * 7))
End Function
'See what day of the year it is
Public Function DayOfYear(ByVal Day As Integer, ByVal Month As Integer, ByVal LeapYear As Boolean) As Integer
  Dim i As Integer, fDay As Integer
  For i = 1 To Month - 1
    fDay = fDay + DaysInMonth(i, LeapYear)
  Next
  fDay = fDay + Day
  DayOfYear = fDay
End Function
'This function check how many days there are between
'two certain dates
Public Function DaysBetween(ByVal startDay As Integer, ByVal startMonth As Integer, ByVal startYear As Integer, ByVal endDay As Integer, ByVal endMonth As Integer, ByVal endYear As Integer) As Long
  Dim startIsLeap As Boolean, endIsLeap As Boolean
  Dim daysToEnd As Integer, fDays As Integer
  startIsLeap = IsLeapYear(startYear)
  endIsLeap = IsLeapYear(endYear)
  
  startDay = DayOfYear(startDay, startMonth, startIsLeap)
  endDay = DayOfYear(endDay, endMonth, endIsLeap)
  
  If startYear = endYear Then
    DaysBetween = endDay - startDay
    Exit Function
  End If
  
  daysToEnd = DaysInYear(startYear) - startDay
  
  For i = startYear + 1 To endYear - 1
    fDays = fDays + DaysInYear(i)
  Next
  
  fDays = fDays + daysToEnd + endDay
  DaysBetween = fDays
  
End Function
Public Function DaysInMonth(ByVal Month As Integer, ByVal LeapYear As Boolean) As Integer
  Select Case Month
    Case 1, 3, 5, 7, 8, 10, 12: DaysInMonth = 31
    Case 2
      If LeapYear Then
        DaysInMonth = 29
       Else
        DaysInMonth = 28
      End If
    Case 4, 6, 9, 11: DaysInMonth = 30
  End Select
End Function
'Use this function to determine how many days there are in a year
Public Function DaysInYear(ByVal Year As Integer) As Integer
  'leap years have 366 days and other years have
  '365. simple
  If IsLeapYear(Year) Then
    DaysInYear = 366
   Else
    DaysInYear = 365
  End If
End Function
Private Function DayString(ByVal Weekday As Integer)
  'this function is used by the DayOfWeek function only
  Select Case Weekday
    Case 0: DayString = "Saturday"
    Case 1: DayString = "Sunday"
    Case 2: DayString = "Monday"
    Case 3: DayString = "Tuesday"
    Case 4: DayString = "Wednesday"
    Case 5: DayString = "Thursday"
    Case 6: DayString = "Friday"
  End Select
End Function
' Use this function to determine if a certain year is a leap year.
Public Function IsLeapYear(ByVal Year As Integer) As Boolean
  If Year Mod 4 = 0 Then
    IsLeapYear = True
    If Year Mod 100 = 0 And Year Mod 400 <> 0 Then
      IsLeapYear = False
    End If
  End If
  'all years divisible by 4 are leap years with the exception
  'of years that are divisible by 100 and not by 400
End Function
Please email me comments, suggestions and especially BUGS!
c03jabot@prg.wcape.school.za

Author: dwirch

Derek Wirch is a seasoned IT professional with an impressive career dating back to 1986. He brings a wealth of knowledge and hands-on experience that is invaluable to those embarking on their journey in the tech industry.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.