Date/Time Functions – Part 1

(Parts of a Date)

 

Recall the VB keywords that reference the current date and/or time:

 

            Now     Returns the current date and time together

            Date     Returns the current date

            Time    Returns the current time

 

For the examples that follow, assume that the current Date/Time (Now) is Friday, August 31, 2001 at 9:15:20 PM.

 

The following functions isolate the date portion and time portion, respectively, of a Date/Time value:

 

Function

Description

DateValue

Returns the date portion of a Date/Time value, with the time portion "zeroed out". (Note: When the time portion of a date/time variable is "zeroed out", the time would be interpreted as 12:00 AM.)

 

Example:

 

Dim dtmTest As Date

dtmTest = DateValue(Now)

 

At this point, the date portion of dtmTest is 8/31/2001, with a time portion of 0 (12:00 AM midnight).

 

TimeValue

Returns the time portion of a Date/Time value, with the date portion "zeroed out". (Note: When a date/time variable is "zeroed out", the date will actually be interpreted as December 30, 1899.)

 

Example:

 

Dim dtmTest As Date

dtmTest = TimeValue(Now)

 

At this point, the time portion of dtmTest is 9:15:20 PM, with a date portion of 0 (12/30/1899).

 

 

The following functions are used to isolate a particular part of a date:

 

Function

Description

Weekday

Returns a number from 1 to 7 indicating the day of the week for a given date, where 1 is Sunday and 7 is Saturday.

 

Example:

intDOW = Weekday(Now)         ' intDOW = 6

 

Note:

When necessary to refer to a day of the week in code, VB has a set of built-in constants that can be used instead of the hard-coded values 1 thru 7:

            Constant                       Value

            vbSunday                      1

            vbMonday                      2

            vbTuesday                     3

            vbWednesday    4

            vbThursday                    5

            vbFriday                        6

            vbSaturday                    7

 

 

Function

Description

WeekdayName

Returns a string containing the weekday name ("Sunday" thru "Saturday"), given a numeric argument with the value 1 through 7.

 

Example:

strDOW = WeekdayName(6)       ' strDOW = "Friday"

 

The WeekdayName function takes an optional, second argument (Boolean) indicating whether or not to abbreviate the weekday name. By default, the second argument is False, meaning do not abbreviate and return the full name. If True, the first three letters of the weekday name will be returned:

 

Example:

strDOW = WeekdayName(6, True) ' strDOW = "Fri"

 

You can nest the Weekday function within the WeekdayName function to get the weekday name for a given date:

 

Example:

strDOW = WeekdayName(Weekday(Now))  ' strDOW = "Friday"

     

Month

Returns a number from 1 to 12 indicating the month portion of a given date.

 

Example:

intMonth = Month(Now)               ' intMonth = 8

 

MonthName

Returns a string containing the month name ("January" thru "December"), given a numeric argument with the value 1 through 12.

 

Example:

strMoName = MonthName(8)            ' strMoName = "August"

 

The MonthName function takes an optional, second argument (Boolean) indicating whether or not to abbreviate the month name. By default, the second argument is False, meaning do not abbreviate and return the full name. If True, the first three letters of the month name will be returned:

 

Example:

strMoName = MonthName(8, True)      ' strMoName = "Aug"

 

You can nest the Month function within the MonthName function to get the month name for a given date:

 

Example:

strMoName = MonthName(Month(Now))   ' strMoName = "August"

 

Day

Returns a number from 1 to 31 indicating the day portion of a given date.

 

Example:

intDay = Day(Now)             ' intDay = 31

 

Year

Returns a number from 100 to 9999 indicating the year portion of a given date.

 

Example:

intYear = Year(Now)                 ' intYear = 2001

 

 

The following functions are used to isolate a particular part of a time:

 

Function

Description

Hour

Returns an integer specifying a whole number between 0 and 23 representing the hour of the day.

 

Example:

intHour = Hour(Now)                 ' intHour = 21 (for 9 PM)

 

Minute

Returns an integer specifying a whole number between 0 and 59 representing the minute of the hour.

 

Example:

intMinute = Minute(Now)             ' intMinute = 15

 

Second

Returns an integer specifying a whole number between 0 and 59 representing the second of the minute.

 

Example:

intSecond = Second(Now)             ' intSecond = 20

 

 

To demonstrate the date functions shown thus far, set up a "Try It" project, and place the following code in the cmdTryIt_Click event:

 

Private Sub cmdTryIt_Click()

 

    Print "Now:"; Tab(30); Now

    Print "Using DateValue:"; Tab(30); DateValue(Now)

    Print "Using TimeValue:"; Tab(30); TimeValue(Now)

    Print "Using Weekday:"; Tab(30); Weekday(Now)

    Print "Using WeekdayName:"; Tab(30); WeekdayName(Weekday(Now))

    Print "Using WeekdayName (abbrev.):"; Tab(30); WeekdayName(Weekday(Now), True)

    Print "Using Month:"; Tab(30); Month(Now)

    Print "Using MonthName:"; Tab(30); MonthName(Month(Now))

    Print "Using MonthName (abbrev.):"; Tab(30); MonthName(Month(Now), True)

    Print "Using Day:"; Tab(30); Day(Now)

    Print "Using Year:"; Tab(30); Year(Now)

    Print "Using Hour:"; Tab(30); Hour(Now)

    Print "Using Minute:"; Tab(30); Minute(Now)

    Print "Using Second:"; Tab(30); Second(Now)

 

End Sub

 

Run the project and click the "Try It" button. The output should look similar to the following:

 

 

 

Download the VB project code for the example above here.

 

 

The DatePart Function

 

The generic DatePart function returns an Integer containing the specified part of  a given date/time value. Thus, it incorporates the functionality of the Weekday, Month, Day, Year, Hour, Minute, and Second functions. In addition, it can used to get the quarter of a given date (1 through 4) , the "Julian" date (the day of the year from 1 to 366), and the week number (1 through 53).

 

Syntax:

DatePart(interval, date[,firstdayofweek[, firstweekofyear]])

 

The DatePart function syntax has these parts:

 

Part

Description

interval

Required. String expression that is the interval of time you want to return.

 

The string expression can be any of the following:

 

Expression

Description

Possible Range of Values

"yyyy"

Year

100 to 9999

"q"

Quarter

1 to 4

"m"

Month

1 to 12

"y"

Day of year

1 to 366 (a "Julian" date)

"d"

Day

1 to 31

"w"

Weekday

1 to 7

"ww"

Week

1 to 53

"h"

Hour

0 to 23

"n"

Minute

0 to 59

"s"

Second

0 to 59

date

Required. Date value that you want to evaluate.

 

firstdayofweek

Optional. A constant that specifies the first day of the week. If not specified, Sunday is assumed.

 

firstweekofyear

Optional. A constant that specifies the first week of the year. If not specified, the first week is assumed to be the week in which January 1 occurs.

 

 

To demonstrate DatePart, set up a "Try It" project, and place the following code in the cmdTryIt_Click event:

 

Private Sub cmdTryIt_Click()

 

    Print "Current date/time is: "; _

          Format$(Now, "Long Date"); _

          Spc(1); _

          Format$(Now, "Long Time")

         

    Print "*** DatePart Function Examples ***"

   

    Print "Using 'yyyy':"; Tab(20); DatePart("yyyy", Now)

    Print "Using 'q':"; Tab(20); DatePart("q", Now)

    Print "Using 'm':"; Tab(20); DatePart("m", Now)

    Print "Using 'y':"; Tab(20); DatePart("y", Now)

    Print "Using 'd':"; Tab(20); DatePart("d", Now)

    Print "Using 'w':"; Tab(20); DatePart("w", Now)

    Print "Using 'ww':"; Tab(20); DatePart("ww", Now)

    Print "Using 'h':"; Tab(20); DatePart("h", Now)

    Print "Using 'n':"; Tab(20); DatePart("n", Now)

    Print "Using 's':"; Tab(20); DatePart("s", Now)

 

End Sub

 

 

Run the project and click the "Try It" button. The output should look similar to the following:

 

 

 

 

Download the VB project code for the example above here.

 

 

Piecing Separate Numbers Together to Form a Date or Time Value

 

In the previous examples, we saw ways to isolate parts of a date/time value. What if you need to go the "other way"? If you have the separate parts of a date/time value in different variables and want to piece them together to formulate a date or time, there are two functions you can use to do this: DateSerial and TimeSerial.

 

The DateSerial takes three numeric arguments: year, month, and day respectively. It returns a date based on those values.

Example:

 

Dim intYear    As Integer

Dim intMonth   As Integer

Dim intDay     As Integer

Dim dtmNewDate As Date

 

intYear = 2001

intMonth = 9

intDay = 2

 

dtmNewDate = DateSerial(intYear, intMonth, intDay)   

' returns 9/2/2001

 

The TimeSerial takes three numeric arguments: hour, minute, and second respectively. It returns a time based on those values.

Example:

 

Dim intHour    As Integer

Dim intMinute  As Integer

Dim intSecond  As Integer

Dim dtmNewTime As Date

 

intHour = 11   

intMinute = 34

intSecond = 44

 

dtmNewTime = TimeSerial(intHour, intMinute, intSecond) 

'returns 11:34:44 (AM)