# addmonths — функция скриптa и диаграммы

Эта функция возвращает дату через n месяцев после даты начала startdate или, если n является отрицательным числом, — дату за n месяцев до даты начала startdate.

Синтаксис:

AddMonths(startdate, n , [ , mode])

Возвращаемые типы данных: двойное значение

Функция `addmonths()` прибавляет или вычитает определенное количество месяцев, `n`, из `startdate` и возвращает полученную дату.

Аргумент `mode` оказывает влияние на значения `startdate` начиная с 28 числа месяца. Задавая аргументу `mode` значение 1, функция `addmonths()` возвращает дату, которая находится на том же относительном расстоянии до конца месяца, что и `startdate`.

Диаграмма примера функции `addmonths()`

Диаграмма примера функции `addmonths()`

Диаграмма примера функции `addmonths()`addmonths() ![Диаграмма с примером того, как различные компоненты функции addmonths объединяются для получения результирующей даты.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-overview.png)

Например, 28 февраля является последним днем месяца. Если функция `addmonths()` с `mode` = 1 используется для получения даты через два месяца после этой, функция возвращает последнюю дату апреля — 30 апреля.

Диаграмма с примером функции `addmonths()` с `mode=1`

Диаграмма с примером функции `addmonths()` с `mode=1`

Диаграмма с примером функции `addmonths()`addmonths() с `mode=1`mode=1 ![Диаграмма с примером того, как изменение аргумента mode позволяет получить другую результирующую дату с помощью функции addmonths.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-overview-n-mode-arguments.png)

Аргументы

| Аргумент | Описание |
| --- | --- |
| startdate | Начальная дата в виде метки времени, например '2012-10-12'. |
| n | Количество месяцев в виде положительного или отрицательного целого числа. |
| mode | Указывает, добавляется ли месяц относительно начала или конца месяца. Режим по умолчанию при добавлении относительно начала месяца — 0. Для добавлений относительно конца месяца установите режим 1. Если установлен режим 1 и введенная дата — 28-е число или выше, функция оценивает количество дней, оставшихся от начальной даты до конца месяца. То же количество дней до конца месяца устанавливается для возвращенной даты. |

## Когда это следует использовать

Функция `addmonths()` широко используется в составе выражения для поиска даты, которая на заданное количество месяцев отстоит от периода времени в прошлом или будущем.

Например, функцию `addmonths()` можно использовать для определения даты окончания договоров на обслуживание мобильных телефонов.

Примеры функции

| Пример | Результат |
| --- | --- |
| `addmonths ('01/29/2003' ,3)` | Возвращает 04/29/2003. |
| `addmonths ('01/29/2003',3,0)` | Возвращает 04/29/2003. |
| `addmonths ('01/29/2003',3,1)` | Возвращает 04/28/2003. |
| `addmonths ('01/29/2003',1,0)` | Возвращает 02/28/2003. |
| `addmonths ('01/29/2003',1,1)` | Возвращает 02/26/2003. |
| `addmonths ('02/28/2003',1,0)` | Возвращает 03/28/2003. |
| `addmonths ('02/28/2003',1,1)` | Возвращает 03/31/2003. |
| `addmonths ('01/29/2003',-3)` | Возвращает 10/29/2002. |

## Региональные настройки

Если не указано иное, в примерах, приведенных в данном разделе, используется следующий формат даты: ММ/ДД/ГГГГ. Формат даты указан в операторе `SET DateFormat` скрипта загрузки данных. В вашей системе может быть установлен другой формат даты по умолчанию в зависимости от региональных настроек и других факторов. Можно изменить формат в примерах в соответствии с потребностями. Или можно изменить форматы в скрипте загрузки в соответствии с этими примерами.

Региональные настройки по умолчанию в приложениях основаны на системных региональных настройках компьютера или сервера, где установлено ПО Qlik Sense. Если на сервере Qlik Sense, к которому обращается пользователь, выбран шведский язык, то редактор загрузки данных будет использовать шведские региональные настройки для даты, времени и валюты. Эти параметры регионального формата не связаны с языком, отображаемым в интерфейсе пользователя Qlik Sense. Qlik Sense будет отображаться на языке, который используется в браузере.

## Пример 1. Без дополнительных аргументов

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/addmonths.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит следующее:

* Набор данных, содержащий набор транзакций с 2020 по 2022 год, который загружается в таблицу под именем `Transactions`.

* Поле даты было предоставлено в формате системной переменной `DateFormat` (MM/DD/YYYY).

* Создание поля `two_months_later`, возвращающего дату, которая наступит через два месяца после транзакции.

Скрипт загрузки

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        addmonths(date,2) as two_months_later
        ;
Load
*
Inline 
[
id,date,amount
8188,'01/10/2020',37.23
8189,'02/28/2020',17.17
8190,'04/09/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'08/14/2020',82.06
8194,'10/07/2020',40.39
8195,'12/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'12/27/2021',25.12
8204,'02/02/2022',46.23
8205,'02/26/2022',84.21
8206,'03/07/2022',96.24
8207,'03/11/2022',67.67
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `date`

* `two_months_later`

Результирующая таблица

| date | two\_months\_later |
| --- | --- |
| 01/10/2020 | 03/10/2020 |
| 02/28/2020 | 04/28/2020 |
| 04/09/2020 | 06/09/2020 |
| 04/16/2020 | 06/16/2020 |
| 05/21/2020 | 07/21/2020 |
| 08/14/2020 | 10/14/2020 |
| 10/07/2020 | 12/07/2020 |
| 12/05/2020 | 02/05/2021 |
| 01/22/2021 | 03/22/2021 |
| 02/03/2021 | 04/03/2021 |
| 03/17/2021 | 05/17/2021 |
| 04/23/2021 | 06/23/2021 |
| 05/04/2021 | 07/04/2021 |
| 06/30/2021 | 08/30/2021 |
| 07/26/2021 | 09/26/2021 |
| 12/27/2021 | 02/27/2022 |
| 02/02/2022 | 04/02/2022 |
| 02/26/2022 | 04/26/2022 |
| 03/07/2022 | 05/07/2022 |
| 03/11/2022 | 05/11/2022 |

Поле `two_months_later` создано в предшествующем операторе load с помощью функции `addmonths()`. Первый предоставленный аргумент определяет, какая дата оценивается. Второй аргумент указывает количество месяцев, которое необходимо прибавить к `startdate` или вычесть из этого значения. В данном примере предоставлено значение 2.

Диаграмма функции `addmonths()`, пример без дополнительных аргументов

Диаграмма функции `addmonths()`, пример без дополнительных аргументов

Диаграмма функции `addmonths()`addmonths(), пример без дополнительных аргументов![Диаграмма функции addmonths, демонстрирующая, как транзакция 8193 из скрипта загрузки преобразуется с входной даты в результирующую выходную дату.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-no-add-arg.png)

Транзакция 8193 выполнена 14 августа. Таким образом, функция `addmonths()` возвращает 14 октября 2020 года для поля `two_months_later`.

## Пример 2. Относительный конец месяца

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/addmonths.htm)

#### Скрипт загрузки и результаты

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит следующее:

* Набор данных, содержащий набор транзакций конца месяца за 2022 год, который загружается в таблицу под именем `Transactions`.

* Поле даты было предоставлено в формате системной переменной `DateFormat` (MM/DD/YYYY).

* Создание поля `relative_two_months_prior`, возвращающего дату, которая предшествует транзакции на два месяца.

Скрипт загрузки

```
SET DateFormat='MM/DD/YYYY';

Transactions:
    Load
        *,
        addmonths(date,-2,1) as relative_two_months_prior
        ;
Load
*
Inline 
[
id,date,amount
8188,'01/28/2022',37.23
8189,'01/31/2022',57.54
8190,'02/28/2022',17.17
8191,'04/29/2022',88.27
8192,'04/30/2022',57.42
8193,'05/31/2022',53.80
8194,'08/14/2022',82.06
8195,'10/07/2022',40.39
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* `date`

* `relative_two_months_prior`

Результирующая таблица

| date | relative\_two\_months\_prior |
| --- | --- |
| 01/28/2022 | 11/27/2021 |
| 01/31/2022 | 11/30/2021 |
| 02/28/2022 | 12/31/2021 |
| 04/29/2022 | 02/27/2022 |
| 04/30/2022 | 02/28/2022 |
| 05/31/2022 | 03/31/2022 |
| 08/14/2022 | 06/14/2022 |
| 10/07/2022 | 08/07/2022 |

Поле `relative_two_months_prior` создано в предыдущем операторе load с помощью функции `addmonths()`. Первый предоставленный аргумент определяет, какая дата оценивается. Второй аргумент указывает количество месяцев, которое необходимо прибавить к `startdate` или вычесть из этого значения. В данном примере предоставлено значение -2. В качестве последнего аргумента задан mode = 1, который принуждает функцию вычислять дату относительного окончания месяца для всех дат начиная с 28 числа месяца.

Диаграмма функции `addmonths()` с `  n=-2 `

Диаграмма функции `addmonths()` с `  n=-2 `

Диаграмма функции `addmonths()`addmonths() с `  n=-2 ` n=-2![Диаграмма функции addmonths, демонстрирующая, как транзакция 8191 из скрипта загрузки преобразуется с входной даты в результирующую выходную дату.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-rel-mth-end.png)

Транзакция 8199 совершена 29 апреля 2022 года. Первоначально перенос на два месяца назад дает дату в феврале. Затем функция вычисляет значение относительного конца месяца, так как используется третий аргумент функции, который задает mode = 1, и число месяца после 27. Функция определяет, что 29-е число является предпоследним днем апреля, и поэтому возвращает предпоследний день февраля, то есть 27-е число.

## Пример 3. Пример объекта диаграммы

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/addmonths.htm)

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит тот же набор данных и сценарий, что в первом примере.

Однако в этом примере в приложение загружается неизмененный набор данных. В качестве меры в объекте диаграммы создается вычисление, возвращающее дату, которая наступит через два месяца после транзакции.

Скрипт загрузки

```
SET DateFormat='MM/DD/YYYY';

Transactions:
Load
*
Inline 
[
id,date,amount
8188,'01/10/2020',37.23
8189,'02/28/2020',17.17
8190,'04/09/2020',88.27
8191,'04/16/2020',57.42
8192,'05/21/2020',53.80
8193,'08/14/2020',82.06
8194,'10/07/2020',40.39
8195,'12/05/2020',87.21
8196,'01/22/2021',95.93
8197,'02/03/2021',45.89
8198,'03/17/2021',36.23
8199,'04/23/2021',25.66
8200,'05/04/2021',82.77
8201,'06/30/2021',69.98
8202,'07/26/2021',76.11
8203,'12/27/2021',25.12
8204,'02/02/2022',46.23
8205,'02/26/2022',84.21
8206,'03/07/2022',96.24
8207,'03/11/2022',67.67
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте это поле как измерение: `date`.

Создайте следующую меру:

`=addmonths(date,2)`

Результирующая таблица

| date | =addmonths(date,2) |
| --- | --- |
| 01/10/2020 | 03/10/2020 |
| 02/28/2020 | 04/28/2020 |
| 04/09/2020 | 06/09/2020 |
| 04/16/2020 | 06/16/2020 |
| 05/21/2020 | 07/21/2020 |
| 08/14/2020 | 10/14/2020 |
| 10/07/2020 | 12/07/2020 |
| 12/05/2020 | 02/05/2021 |
| 01/22/2021 | 03/22/2021 |
| 02/03/2021 | 04/03/2021 |
| 03/17/2021 | 05/17/2021 |
| 04/23/2021 | 06/23/2021 |
| 05/04/2021 | 07/04/2021 |
| 06/30/2021 | 08/30/2021 |
| 07/26/2021 | 09/26/2021 |
| 12/27/2021 | 02/27/2022 |
| 02/02/2022 | 04/02/2022 |
| 02/26/2022 | 04/26/2022 |
| 03/07/2022 | 05/07/2022 |
| 03/11/2022 | 05/11/2022 |

Мера `two_months_later` создается в объекте диаграммы с помощью функции `addmonths()`. Первый предоставленный аргумент определяет, какая дата оценивается. Второй аргумент указывает количество месяцев, которое необходимо прибавить к `startdate` или вычесть из этого значения. В данном примере предоставлено значение 2.

Диаграмма функции `addmonths()`, пример с объектом диаграммы

Диаграмма функции `addmonths()`, пример с объектом диаграммы

Диаграмма функции `addmonths()`addmonths(), пример с объектом диаграммы![Диаграмма функции addmonths, демонстрирующая, как транзакция 8193 из скрипта загрузки преобразуется из входной даты в результирующую выходную дату.](https://help.qlik.com/ru-RU/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-chart-object.png)

Транзакция 8193 совершена 14 августа. Поэтому функция `addmonths()` возвращает 14 октября 2020 года для поля `two_months_later`.

## Пример 4. Сценарий

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/addmonths.htm)

#### Скрипт загрузки и выражение диаграммы

Обзор

Откройте редактор загрузки данных и добавьте приведенный ниже скрипт загрузки на новую вкладку.

Скрипт загрузки содержит следующее:

* Набор данных, который загружается в таблицу под именем Mobile\_Plans

* Информация содержит ИД договора, дату начала, срок действия договора и ежемесячную плату.

Конечному пользователю требуется объект диаграммы, который показывает дату окончания договора для каждого телефона по ИД договора.

Скрипт загрузки

```
Mobile_Plans:
Load
*
Inline 
[
contract_id,start_date,contract_length,monthly_fee
8188,'01/13/2020',18,37.23
8189,'02/26/2020',24,17.17
8190,'03/27/2020',36,88.27
8191,'04/16/2020',24,57.42
8192,'05/21/2020',24,53.80
8193,'08/14/2020',12,82.06
8194,'10/07/2020',18,40.39
8195,'12/05/2020',12,87.21
8196,'01/22/2021',12,95.93
8197,'02/03/2021',18,45.89
8198,'03/17/2021',24,36.23
8199,'04/23/2021',24,25.66
8200,'05/04/2021',12,82.77
8201,'06/30/2021',12,69.98
8202,'07/26/2021',12,76.11
8203,'12/27/2021',36,25.12
8204,'06/06/2022',24,46.23
8205,'07/18/2022',12,84.21
8206,'11/14/2022',12,96.24
8207,'12/12/2022',18,67.67
];
```

Результаты

Загрузите данные и откройте лист. Создайте новую таблицу и добавьте эти поля как измерения:

* contract\_id

* start\_date

* contract\_length

Создайте следующую меру для расчета даты окончания действия каждого договора:

=addmonths(start\_date,contract\_length, 0)

Результирующая таблица

| contract\_id | start\_date | contract\_length | =addmonths(start\_date,contract\_length,0) |
| --- | --- | --- | --- |
| 8188 | 01/13/2020 | 18 | 07/13/2021 |
| 8189 | 02/26/2020 | 24 | 02/26/2022 |
| 8190 | 03/27/2020 | 36 | 03/27/2023 |
| 8191 | 04/16/2020 | 24 | 04/16/2022 |
| 8192 | 05/21/2020 | 24 | 05/21/2022 |
| 8193 | 08/14/2020 | 12 | 08/14/2021 |
| 8194 | 10/07/2020 | 18 | 04/07/2022 |
| 8195 | 12/05/2020 | 12 | 12/05/2021 |
| 8196 | 01/22/2021 | 12 | 01/22/2022 |
| 8197 | 02/03/2021 | 18 | 08/03/2022 |
| 8198 | 03/17/2021 | 24 | 03/17/2023 |
| 8199 | 04/23/2021 | 24 | 04/23/2023 |
| 8200 | 05/04/2021 | 12 | 05/04/2022 |
| 8201 | 06/30/2021 | 12 | 06/30/2022 |
| 8202 | 07/26/2021 | 12 | 07/26/2022 |
| 8203 | 12/27/2021 | 36 | 12/27/2024 |
| 8204 | 06/06/2022 | 24 | 06/06/2024 |
| 8205 | 07/18/2022 | 12 | 07/18/2023 |
| 8206 | 11/14/2022 | 12 | 11/14/2023 |
| 8207 | 12/12/2022 | 18 | 06/12/2024 |