I based my reply on the fact that the OP created an array called "$BD" (BusinessDay), and the lack of any holiday-type logic in his code.

Holidays aside, if we're looking for the second business day of the month, it's pretty limited logic - it can only be the second, through the fourth, depending on whether the first is on a Friday/weekend or not.

If the first was a Friday, the second day is Monday following, If the first is on Saturday, or Sunday, the second business day is the Tuesday that follows. Otherwise, it is the second day of the month.

Thus,
 Code:
Select
 ; First was Friday - SBD is Monday
 Case @WDAYNO = 2 And @MDAYNO = 4
  DoSecondBusDay()
 ; First was Sat or Sun - SBD is Tuesday
 Case @WDAYNO = 3 And @MDAYNO = 4 or @MDAYNO = 3
  DoSecondBusDay()
 ; First is Mon-Thur, today is the second day of the month
 Case @MDAYNO = 2
  DoSecondBusDay()
EndSelect
Of course, if holidays must be accounted for, than a simple 12-line INI file would get the job done.
 Code:
[SBD_OF_MONTH]
2009/01/02=1
2009/02/03=1
2009/03/03=1
2009/04/02=1
lists the dates that represent the second business day each month. The value is unimportant, it just holds a non-zero value. The code is reduced to
 Code:
If ReadProfileString('.\dates.ini', 'SBD_OF_MONTH', @DATE)
  ; it's the second business day!
EndIf
The code will return false unless the current date is found in the dates.ini file. Of course, you could use a combination of methods, using the lookup as the first attempt in the Select statement. This way, the dates.ini file only holds holiday exceptions, which are more difficult (but not impossible) to calculate.

Glenn
_________________________
Actually I am a Rocket Scientist! \:D