VB6Parse / Library / Datetime / date

VB6 Library Reference

Date Function

Returns the current system date as a Variant of subtype Date.

Syntax

Date

Parameters

None. The Date function takes no parameters.

Return Value

Returns a Variant of subtype Date (VarType = 7) containing the current system date. The time portion is set to midnight (00:00:00).

Remarks

The Date function returns the current date from the system clock. Unlike Now, which returns both date and time, Date returns only the date portion with the time set to midnight.

Important Characteristics:

Date Storage Format

Internally, dates are stored as Double precision floating-point numbers: - Integer part: Number of days since December 30, 1899 - Fractional part: Time of day (0.0 = midnight, 0.5 = noon, etc.) - Date function always returns fractional part as 0.0

Examples

Basic Usage

' Get current date
Dim today As Date
today = Date
MsgBox "Today is: " & today

' Display in message box
MsgBox "Current date: " & Date

' Store in Variant
Dim currentDate As Variant
currentDate = Date

Date Calculations

' Calculate days until end of year
Dim daysLeft As Long
daysLeft = DateSerial(Year(Date), 12, 31) - Date
MsgBox daysLeft & " days left in the year"

' Add 30 days to current date
Dim futureDate As Date
futureDate = Date + 30
MsgBox "30 days from now: " & futureDate

' Subtract dates to get difference
Dim startDate As Date
Dim daysPassed As Long
startDate = #1/1/2025#
daysPassed = Date - startDate

Date Comparison

' Check if date is in the past
Dim deadline As Date
deadline = #12/31/2025#

If Date > deadline Then
MsgBox "Deadline has passed!"
Else
MsgBox "Still time remaining"
End If

' Compare with specific date
If Date = #1/1/2025# Then
MsgBox "Happy New Year!"
End If

Common Patterns

Date Stamping Records

' Add timestamp to database record
rs.AddNew
rs("CustomerName") = txtName.Text
rs("OrderDate") = Date
rs("OrderTime") = Time
rs.Update

' File naming with date
Dim fileName As String
fileName = "Report_" & Format(Date, "yyyymmdd") & ".txt"

Date Validation

Function IsDateInRange(checkDate As Date, startDate As Date, endDate As Date) As Boolean
IsDateInRange = (checkDate >= startDate And checkDate <= endDate)
End Function

' Check if today is within range
If IsDateInRange(Date, #1/1/2025#, #12/31/2025#) Then
MsgBox "Date is within 2025"
End If

Age Calculation

Function CalculateAge(birthDate As Date) As Integer
Dim age As Integer
age = Year(Date) - Year(birthDate)

' Adjust if birthday hasn't occurred yet this year
If Month(Date) < Month(birthDate) Or _
(Month(Date) = Month(birthDate) And Day(Date) < Day(birthDate)) Then
age = age - 1
End If

CalculateAge = age
End Function

Business Days Calculation

Function IsWeekday(checkDate As Date) As Boolean
Dim dayOfWeek As Integer
dayOfWeek = Weekday(checkDate)
IsWeekday = (dayOfWeek > 1 And dayOfWeek < 7)  ' Not Sunday(1) or Saturday(7)
End Function

Function AddBusinessDays(startDate As Date, days As Integer) As Date
Dim currentDate As Date
Dim daysAdded As Integer

currentDate = startDate
daysAdded = 0

Do While daysAdded < days
currentDate = currentDate + 1
If IsWeekday(currentDate) Then
daysAdded = daysAdded + 1
End If
Loop

AddBusinessDays = currentDate
End Function

Date Range Reporting

Sub GenerateMonthlyReport()
Dim firstDay As Date
Dim lastDay As Date

' Get first day of current month
firstDay = DateSerial(Year(Date), Month(Date), 1)

' Get last day of current month
lastDay = DateSerial(Year(Date), Month(Date) + 1, 0)

' Generate report for date range
MsgBox "Report period: " & firstDay & " to " & lastDay
End Sub

Date-Based File Organization

Function GetArchiveFolder() As String
Dim folderPath As String
folderPath = "C:\Archive\" & Year(Date) & "\" & Format(Date, "mm")

' Create folder if it doesn't exist
If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
End If

GetArchiveFolder = folderPath
End Function

Expiration Checking

Function IsExpired(expirationDate As Date) As Boolean
IsExpired = (Date > expirationDate)
End Function

Function DaysUntilExpiration(expirationDate As Date) As Long
If IsExpired(expirationDate) Then
DaysUntilExpiration = 0
Else
DaysUntilExpiration = expirationDate - Date
End If
End Function

Logging with Timestamps

Sub LogMessage(message As String)
Dim logFile As Integer
Dim logFileName As String

' Create daily log file
logFileName = "Log_" & Format(Date, "yyyy-mm-dd") & ".txt"

logFile = FreeFile
Open logFileName For Append As logFile
Print #logFile, Date & " " & Time & ": " & message
Close logFile
End Sub

Advanced Usage

Date Cache for Performance

' Module-level variables
Private m_cachedDate As Date
Private m_cacheValid As Boolean

Function GetTodaysDate() As Date
' Cache date to avoid repeated system calls in tight loops
Static lastCheck As Date

If Not m_cacheValid Or lastCheck <> Date Then
m_cachedDate = Date
lastCheck = m_cachedDate
m_cacheValid = True
End If

GetTodaysDate = m_cachedDate
End Function

Fiscal Year Calculations

Function GetFiscalYear(Optional checkDate As Variant) As Integer
Dim workDate As Date

' Use current date if not specified
If IsMissing(checkDate) Then
workDate = Date
Else
workDate = checkDate
End If

' Fiscal year starts April 1
If Month(workDate) < 4 Then
GetFiscalYear = Year(workDate) - 1
Else
GetFiscalYear = Year(workDate)
End If
End Function

Function GetFiscalQuarter(Optional checkDate As Variant) As Integer
Dim workDate As Date
Dim fiscalMonth As Integer

If IsMissing(checkDate) Then
workDate = Date
Else
workDate = checkDate
End If

' Calculate month in fiscal year (April = 1)
fiscalMonth = Month(workDate) - 3
If fiscalMonth <= 0 Then fiscalMonth = fiscalMonth + 12

' Determine quarter
GetFiscalQuarter = Int((fiscalMonth - 1) / 3) + 1
End Function

Date Sequence Generator

Function GenerateDateRange(startDate As Date, endDate As Date) As Variant
Dim dates() As Date
Dim currentDate As Date
Dim index As Long
Dim dayCount As Long

dayCount = endDate - startDate + 1
ReDim dates(0 To dayCount - 1)

currentDate = startDate
For index = 0 To dayCount - 1
dates(index) = currentDate
currentDate = currentDate + 1
Next index

GenerateDateRange = dates
End Function

Date-Based Conditional Logic

Function GetDiscountRate() As Double
Dim dayOfMonth As Integer
dayOfMonth = Day(Date)

Select Case dayOfMonth
Case 1 To 10
GetDiscountRate = 0.1   ' 10% early month discount
Case 11 To 20
GetDiscountRate = 0.05  ' 5% mid-month discount
Case Else
GetDiscountRate = 0     ' No discount
End Select
End Function

Date vs Now vs Time

' Date - Returns only date portion (time = midnight)
Dim d As Date
d = Date  ' Example: 1/15/2025 12:00:00 AM

' Now - Returns date and time
Dim n As Date
n = Now   ' Example: 1/15/2025 2:30:45 PM

' Time - Returns only time portion (date = Dec 30, 1899)
Dim t As Date
t = Time  ' Example: 12/30/1899 2:30:45 PM

' Extract components
Dim today As Date
today = Date  ' Gets just the date
Dim dateTime As Date
dateTime = today + Time  ' Combines current date and time

Setting the System Date

' Date can also be used as a statement (requires admin rights)
Date = #1/1/2025#  ' Sets system date

' More common: just read the date
Dim currentDate As Date
currentDate = Date  ' Read-only operation

Performance Considerations

Best Practices

Cache in Long-Running Loops

' Inefficient - calls Date repeatedly
For i = 1 To 10000
If records(i).ExpiryDate < Date Then
' Process expired record
End If
Next i

' Better - cache the date
Dim today As Date
today = Date
For i = 1 To 10000
If records(i).ExpiryDate < today Then
' Process expired record
End If
Next i

Use Appropriate Date Functions

' Good - Use Date for date-only operations
Dim orderDate As Date
orderDate = Date

' Good - Use Now for timestamps
Dim timestamp As Date
timestamp = Now

' Avoid - Don't extract date from Now if you just need date
Dim today As Date
today = Int(Now)  ' Works but less clear than Date

Store Dates as Date Type

' Good - Proper type usage
Dim birthDate As Date
birthDate = Date

' Avoid - String storage loses type safety and comparison capability
Dim birthDateStr As String
birthDateStr = CStr(Date)  ' Comparison becomes string-based

Locale Considerations

' Display varies by locale
MsgBox Date  ' US: 1/15/2025, UK: 15/01/2025

' Explicit formatting
MsgBox Format(Date, "yyyy-mm-dd")  ' Always: 2025-01-15

Limitations

← Back to Datetime | View all functions