Tricks with DateSerial

Tricks with DateSerial

The DateSerial function has an interesting feature: it doesn’t raise errors when you pass it an invalid month or day number. Instead, it evaluates the date as if the arguments were valid. For example, DateSerial(2000, 1, 32) returns the Date value of February 1, 2000. This behavior can (and should) be considered as a bug, but it’s a fact that it has never changed since VB1 and it is highly unlikely that Microsoft will change it in future versions of VB.

You can take advantage of this feature by writing date functions that would be rather difficult to write otherwise. For example:

' the last day of a givan monthFunction EndOfMonth(Year As Integer, Month As Integer) As Date    EndOfMonth = DateSerial(Year, Month + 1, 0)End Function' number of days in a monthFunction DaysInMonth(Year As Integer, Month As Integer) As Integer    DaysInMonth = Day(DateSerial(Year, Month + 1, 0))End Function' True if leap yearFunction IsLeapYear(Year As Integer) As Boolean    IsLeapYear = (Day(DateSerial(Year, 3, 0)) = 29)End Function


Share the Post: