# 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-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-overview.png)

例如，2 月 28 日是該月的最後一天。若 `mode` 為 1 的 `addmonths()` 函數用來傳回兩個月後的日期，則該函數將會傳回 4 月的最後一個日期 4 月 30 日。

`addmonths()` 函數的範例圖表，具有 `mode=1`

`addmonths()` 函數的範例圖表，具有 `mode=1`

`addmonths()`addmonths() 函數的範例圖表，具有 `mode=1`mode=1 ![範例圖表顯示可以如何改變「mode」引數，以變更 addmonths 函數的輸出日期。](https://help.qlik.com/zh-TW/cloud-services/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()` 函數可用來識別手機聯絡人的結束日期。

函數範例

| 範例 | 結果 |
| --- | --- |
| `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` 陳述式中指定。由於地區設定和其他因素，您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式，以滿足您的需求。或者，您可以在載入指令碼中變更格式，以符合這些範例。如需詳細資訊，請參閱 [修改用於應用程式和指令碼的區域設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

應用程式中的預設地區設定是根據使用者設定檔。這些地區格式設定與 Qlik Cloud 使用者介面中顯示的語言無關。Qlik Cloud 顯示的語言將與您正在使用的瀏覽器相同。

若您是應用程式建立者，可以為您建立的應用程式設定預設地區。如需詳細資訊，請參閱[Qlik Cloud 分析 中設定用於建立應用程式和指令碼的偏好區域設定](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)。

## 範例 1 – 無其他引數

[](https://help.qlik.com/en-US/cloud-services/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`

結果表格

| 日期 | 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`」欄位使用 `addmonths()` 函數在前置 LOAD 陳述式中建立。提供的第一個引數識別正在評估哪個日期。第二個引數是要從 `startdate` 加上或減去的月數。在此例中，提供的值為 2。

`addmonths()` 函數的圖表，無其他引數的範例

`addmonths()` 函數的圖表，無其他引數的範例

`addmonths()`addmonths() 函數的圖表，無其他引數的範例 ![addmonths 函數的圖表顯示載入指令碼中的交易 8193 如何從輸入日期轉換為產生的輸出日期。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-no-add-arg.png)

交易 8193 發生於 8 月 14 日。因此， `addmonths()` 函數會為 `two_months_later` 欄位傳回 2020 年 10 月 14 日。

## 範例 2 – 相對月底

[](https://help.qlik.com/en-US/cloud-services/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`

結果表格

| 日期 | 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` 欄位使用 `addmonths()` 函數在前置 LOAD 陳述式中建立。提供的第一個引數識別正在評估哪個日期。第二個引數是要從 `startdate` 加上或減去的月數。在此例中，提供的值為 -2。最終引數是模式，值為 1，這強制該函數為大於或等於 28 的所有日期計算相對月底日期。

`addmonths()` 函數的圖表，範例具有 `  n=-2 `

`addmonths()` 函數的圖表，範例具有 `  n=-2 `

`addmonths()`addmonths() 函數的圖表，範例具有 `  n=-2 ` n=-2 ![addmonths 函數的圖表顯示載入指令碼中的交易 8191 如何從輸入日期轉換為產生的輸出日期。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-rel-mth-end.png)

交易 8191 發生在 2022 年 4 月 29 日。最初，提前兩個月會將月份設定為 2 月。然後，由於函數的第三個引數將模式設定為 1，而日期值晚於 27 日，該函數會計算相對月底值。該函數識別 29 日是 4 月的倒數第二天，因此會傳回 2 月的倒數第二天 2 月 27 日。

## 範例 3 – 圖表物件範例

[](https://help.qlik.com/en-US/cloud-services/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)`

結果表格

| 日期 | =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-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-addmonths-examples-chart-object.png)

交易 8193 發生於 8 月 14 日。因此， `addmonths()` 函數會為 `two_months_later` 欄位傳回 2020 年 10 月 14 日。

## 範例 4 – 情境

[](https://help.qlik.com/en-US/cloud-services/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 |