---
url: >-
  /statelake/scripting-reference/functions-and-procedures/datetime-functions/decodedayofweekinmonth.md
---

# DecodeDayOfWeekInMonth

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 v**alue 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.

```pascal
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;
```
