Thursday 10 May 2007

When is Sunday Monday?

Time for an infinite wisdom post now. On my system and in Microsoft Access 2002 the following VBA command:
?WeekdayName(vbSunday)

yields the result
Monday


Awesome!

Why does this happen? Well, it turns out that the help file is right but the actual command in Access doesn't do what it says on the tin.

Description
Returns a string indicating the specified day of the week.

Syntax
WeekdayName(weekday, abbreviate, firstdayofweek)

The WeekdayName function syntax has these parts:
PartDescription
weekdayRequired. The numeric designation for the day of the week. Numeric value of each day depends on setting of the firstdayofweek setting.
abbreviateOptional. Boolean value that indicates if the weekday name is to be abbreviated. If omitted, the default is False, which means that the weekday name is not abbreviated.
firstdayofweekOptional. Numeric value indicating the first day of the week. See Settings section for values.

Settings
The firstdayofweek argument can have the following values:
ConstantValueDescription
vbUseSystem0Use National Language Support (NLS) API setting.
vbSunday1Sunday (default)
vbMonday2Monday
vbTuesday3Tuesday
vbWednesday4Wednesday
vbThursday5Thursday
vbFriday6Friday
vbSaturday7Saturday

Note the help file shows us a third argument that changes the first day of the week. It states that the default is vbSunday (value: 1).

Not true. The default value is 0 and on my system the first day of the week is set to Saturday. This system-wide value is the one that is used to determine which day comes first on those month-at-a-time views such as the one you get by double-clicking the time in the Windows system tray.

Therefore, according to this function on my system, vbSunday is Monday.

No comments: