Verifying That a Value Is a Date
Microsoft® Windows® 2000 Scripting Guide
In working with dates, it is important to know whether a particular value is actually a date or not. This is especially true when making WMI queries or when working with databases; your script will fail if it attempts to use an invalid date in these situations.
The IsDate function can tell you whether a supplied value is a date. IsDate returns False (0) if the value is not a date and True (1) if the value is a date. Date values can be passed using either of the following:
Date literals. These are date values enclosed within pound signs (#). This is the recommended way of using dates in scripts because it eliminates the possibility that VBScript will misinterpret the value as being something other than a date. A date literal might look like this:
Date and time formats recognized by your system settings. For example, if your system is set for English (United States), these values are recognized as valid dates:
However, this value is not recognized as a valid date:
If you change your settings to German (Austria), all four values are recognized as dates.
To check valid date formats for your computer, open the Regional and Language Options control panel, click Customize, and then click Date.
The following script creates an array of values and then enumerates each item in the array. The script then uses IsDate to determine whether the item represents a valid date and echoes the value and a message indicating that this is actually a date.
DateArray = Array("6/1/2002", "June 1, 2002", "6", "6/1") For Each dtmDate in DateArray If IsDate(dtmDate) = 0 Then Wscript.Echo dtmDate & " is not a valid date." Else Wscript.Echo dtmDate & " is a valid date." End If Next
When the preceding script runs under CScript, the following information appears in the command window:
6/1/2002 is a valid date. June 1, 2002 is a valid date. 6 is not a valid date. 6/1 is a valid date.
Why is 6/1 a valid date? When using the IsDate function, VBScript tries to construct a plausible date from the value given to it. When it sees a statement that can be interpreted as Month/Day, it automatically appends the current year, resulting in Month/Day/Year. In the preceding script, which was run in the year 2002, that means a value of 6/1/2002, which is a valid date.