# addmonths - 脚本和图表函数

此函数用于返回在 startdate 后 n 个月内发生的日期，或者如果 n 为负数，则用于返回 startdate 前 n 个月内发生的日期。

语法：

AddMonths(startdate, n , [ , mode])

返回数据类型： 双

`addmonths()` 函数从 `startdate` 中加上或减去定义的月数 `n`，并返回结果日期。

`mode` 参数将影响当月 28 日当天或之后的 `startdate` 值。通过将 `mode` 参数设置为 1，`addmonths()` 函数将返回一个与月末的相对距离相等的日期作为 `startdate`。

`addmonths()` 函数的示例图表

`addmonths()` 函数的示例图表

`addmonths()`addmonths() 函数的示例图表 ![示例图表显示了 addmonths 函数的各个分量如何组合在一起生成输出日期。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-overview.png)

例如，2 月 28 日是一个月的最后一天。如果 `addmonths()` 函数（其中 `mode` 为 1）用于在两个月后返回日期，则函数将返回最后一个日期 4 月 30 日。

`addmonths()` 函数的示例图表，具有 `mode=1`

`addmonths()` 函数的示例图表，具有 `mode=1`

`addmonths()`addmonths() 函数的示例图表，具有 `mode=1`mode=1 ![示例图显示了如何更改“mode”参数以更改 addmonths 函数的输出日期。](https://help.qlik.com/zh-CN/sense/May2025/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'。 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `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/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-no-add-arg.png)

交易 8193 发生在 8 月 14 日。因此，对于 `two_months_later` 字段，`addmonths()` 函数返回 October 14, 2020。

## 示例 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/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-rel-mth-end.png)

交易 8191 发生在 2022 年 4 月 29 日。最初，两个月前会将该月设置为 2 月。然后，由于函数的第三个参数将 mode 设置为 1，并且日值晚于 27 号，因此函数计算相对月末值。该函数确定 29 号是 4 月的第二个最后一天，因此返回 2 月的第 2 个最后一日，即 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 |

通过使用 `addmonths()` 函数在图表对象中创建 `two_months_later` 度量。提供的第一个参数标识正在评估的日期。第二个参数是要从 `startdate` 中加减的月数。在本例中，提供的值为 2。

`addmonths()` 函数的图表，图表对象示例

`addmonths()` 函数的图表，图表对象示例

`addmonths()`addmonths() 函数的图表，图表对象示例![addmonths 函数的图表，显示加载脚本中的交易 8193 如何从输入日期转换为结果输出日期。](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-chart-object.png)

交易 8193 发生在 8 月 14 日。因此，对于 `two_months_later` 字段，`addmonths()` 函数返回 October 14, 2020。

## 示例 4 – 场景

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

#### 加载脚本和图表表达式

概览

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 Mobile\_Plans 的表中的数据集。

* 包含合同 ID、开始日期、合同长度和月费的信息。

最终用户想要一个图表对象，该对象按合同 ID 显示每个电话合同的终止日期。

加载脚本

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