tags:

views:

103

answers:

2

In a VBS script, I need to initialise a variable with a date.

In my country, we usually specify a date with this format : day month year

Here is what I'm trying to do in my VBS script :

Date = #07-06-1973#
MsgBox FormatDateTime(Date, vbLongDate)

but the date I get is July the 6th, where I was expecting June the 7th !

Now, as it seems the first number represents the month, here is what I tried to do :

Date = #13-06-1973#
MsgBox FormatDateTime(Date, vbLongDate)

but now, the first number represents the day ! (I get the following date : June the 13th)

I haven't found a way to force the date format, so that there is no more ambiguity.

+2  A: 

#1973-06-13# format would always be interpreted as #yyyy-mm-dd# regardless system locale. Use it instead.

ssg
+1  A: 

Strictly speaking, VBScript supports date literals in the US and ISO formats only:

' US format:
Date = #10/19/2009#

' ISO format:
Date = #2009-10-19#

However, the date separators can be different (slash, dash, space etc), and the VBScript engine also recognizes dates containing abbreviated month names (#Oct 19, 2009#) and non-ambiguous dates with swapped date parts (#2009 19 10#). The latter explains why #13-06-1973# in your second example is recognized as June, 13th: the number 13 falls outside the acceptable range of months (1-12) so it's interpreted as the day part.

If you want to specify dates in your regional format (that is, the format specified in your Regional and Language Options), you can use the CDate function to convert date strings, for example:

' Russian format
Date = CDate("19.10.2009")

But using US and ISO date literals are more reliable and preferred.

Helen