For a given TDateTime value AValue, DecodeDayOfWeekInMonth returns the day of the week and, for that day of the week, which occurrence it is within the month.

  • AValue is the date/time TDateTime value about which you want information.

  • AYear returns the year that AValue represents.

  • AMonth returns the month in which AValue occurs. This value can be from 1 through 12, inclusive.

  • ANthDayOfWeek indicates the count for the day of the week represented by AValue.

    • If AValue represents the second Tuesday of the month, ANthDayOfWeek returns 2. DecodeDayOfWeekInMonth counts every occurrence of the given weekday, so if AValue represents a Saturday that is the first day of a month, DecodeDayOfWeekInMonth returns 1 as the value of ANthDayOfWeek.

  • ADayOfWeek returns the day of the week that AValue represents, where 1 Monday and 7 is Sunday.

The definition for ADayOfWeek follows the ISO 8601 standard.

Declaration: procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);

An easy example follows.

procedure ScriptEvent(var Value:Variant);
var
aDate : TDateTime;
aYear, aMonth, aNth, aDay : word;
begin
//Where NOW is Wednesday 06-12-2023 - result is 2023, 12, 1, 3
ADate := Now;
DecodeDayOfWeekInMonth(aDate, aYear, aMonth, aNth, aDay);
LogInfo('Year is - '+IntToStr(aYear));
LogInfo('Month is - '+IntToStr(aMonth));
LogInfo('Nth is - '+IntToStr(aNth));
LogInfo('Day is - '+IntToStr(aDay));
end;