# today - 指令碼與圖表函數

此函數會傳回目前日期。該函數會以 `DateFormat` 系統變數格式傳回值。

語法：

today([ timer\_mode])

傳回的資料類型： 雙值

`today()` 函數可用於載入指令碼或圖表物件中。

預設 `timer_mode` 值為 1。

引數

| 引數 | 描述 |
| --- | --- |
| timer\_mode | 可以具有下列值：<br><br>0 (最後完成資料載入的日子)<br>1 (函數叫用的日子)<br>2 (開啟應用程式的日子)<br><br>資訊備註如果我們在載入指令碼中使用函數，則 timer\_mode=0 將產生最後完成資料載入的日子，而 timer\_mode=1 將提供目前資料載入的日子。 |

函數範例

| timer\_mode 數值 | 用於載入指令碼的結果 | 用於圖表物件的結果 |
| --- | --- | --- |
| 0 | 以 `DateFormat` 系統變數格式返回最新資料重新載入前，最後一筆成功資料重新載入的日期。 | 以 `DateFormat` 系統變數格式返回最新資料重新載入的日期。 |
| 1 | 以 `DateFormat` 系統變數格式返回最新資料重新載入的日期。 | 以 `DateFormat` 系統變數格式返回函數呼叫的日期。 |
| 2 | 以 `DateFormat` 系統變數格式返回使用者應用程式工作階段開始時的日期。這不會更新內容，除非使用者重新載入指令碼。 | 以 `DateFormat` 系統變數格式返回使用者應用程式工作階段開始的日期。新工作階段開始或應用程式資料重新載入時，即會重新整理內容。 |

## 什麼情況下使用

`today()` 函數常用於當作運算式中的元件。例如，這可用於計算截至目前日期之月份內彙總的利息。

下表提供 `today()` 函數傳回結果的解釋，並提供 `timer_mode` 引數的不同數值：

## 區域設定

除非另有說明，否則此主題中的範例皆使用下列日期格式：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/today.htm)

#### 載入指令碼和結果

概覽

下列範例使用 `today()` 函數建立三項變數。每個變數都會使用其中一個 `timer_mode` 個選項示範其效果。

對於示範用途的變數，重新載入指令碼並在 24 小時後第二次重新載入指令碼。這會造成 `today(0)` 和 `today(1)` 變數顯示不同數值，藉此正確示範其用途。

載入指令碼

```
LET vPreviousDataLoad = today(0);
LET vCurrentDataLoad = today(1);
LET vApplicationOpened = today(2);
```

結果

第二次載入資料後，使用以下指示建立三個文字方塊。

首先，為先前載入的資料建立文字方塊。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 將下列量值新增至物件：

   `=vPreviousDataLoad`

3. 在外觀之下，選取 Show titles 並將標題「Previous Reload Time」(先前載入時間) 新增至物件。

接下來，為目前正在載入的資料建立文字方塊。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 將下列量值新增至物件：

   `=vCurrentDataLoad`

3. 在外觀之下，選取 Show titles 並將標題「Current Reload Time」(目前載入時間) 新增至物件。

建立最後一個文字方塊，以顯示應用程式中的使用者工作階段何時開始。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 將下列量值新增至物件：

   `=vApplicationOpened`

3. 在外觀之下，選取 Show titles 並將標題「User Session Started」(使用者工作階段已開始) 新增至物件。

使用載入指令碼中 `today()` 函數建立變數的圖表

使用載入指令碼中 `today()` 函數建立變數的圖表

使用載入指令碼中 `today()`today() 函數建立變數的圖表![圖表顯示三個產生的文字方塊在使用 today() 函數，以便透過載入指令碼載入變數後的個別外觀。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-today-example-variables-script.png)

上方影像顯示每個建立變數的範例值。例如，數值可能如下所示：

* 先前的重新載入時間：06/22/2022

* 目前的重新載入時間：06/23/2022

* 使用者工作階段開始時間：06/23/2022

## 範例 2 – 不使用載入指令碼產生物件

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

#### 載入指令碼和圖表運算式

概覽

下列範例使用 `today()` 函數建立三項圖表物件。每個圖表物件都會使用其中一個 `timer_mode` 選項示範其效果。

此範例沒有載入指令碼。

結果

第二次載入資料後，建立三個文字方塊。

首先，建立最新資料重新載入的文字方塊。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 新增下列量值。

   `=today(0)`

3. 在外觀之下，選取顯示標題並將標題「最新資料重新載入」新增至物件。

接下來，建立顯示目前時間的文字方塊。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 新增下列量值：

   `=today(1)`

3. 在外觀之下，選取顯示標題並將標題「目前時間」新增至物件。

建立最後一個文字方塊，以顯示應用程式中的使用者工作階段何時開始。

請執行下列動作：

1. 使用文字與影像圖表物件，建立文字方塊。

2. 新增下列量值：

   `=today(2)`

3. 在外觀之下，選取顯示標題並將標題「使用者工作階段已開始」新增至物件。

使用沒有載入指令碼的 `today()` 函數建立物件的圖表

使用沒有載入指令碼的 `today()` 函數建立物件的圖表

使用沒有載入指令碼的 `today()`today() 函數建立物件的圖表![圖表顯示三個產生的文字方塊在使用 today() 函數，以便在資料未載入應用程式後只建立圖表物件的個別外觀。](https://help.qlik.com/zh-TW/sense/November2024/Subsystems/Hub/Content/Resources/Images/scripting-functions-today-example-variables-chart.png)

上方影像顯示每個建立物件的範例值。例如，數值可能如下所示：

* 最新資料重新載入：06/23/2022

* 目前時間： 06/23/2022

* 使用者工作階段開始時間：06/23/2022

「最新資料重新載入」圖表物件使用 0 的 `timer_mode` 值。這會傳回最後一次成功重新載入資料的時間戳記。

「目前時間」圖表物件使用 1 個 `timer_mode` 值。這會傳回根據系統時鐘顯示的目前時間。如果工作表或物件重新整理，即會更新此數值。

「使用者工作階段已開始」的圖表物件使用 2 的 `timer_mode` 值。這會傳回應用程式已開啟且使用者工作階段已開始的時間戳記。

## 範例 3 – 情境

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

#### 載入指令碼和圖表運算式

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 資料集包含一系列貸款餘額，其位於稱為 `Loans` 的表格。

* 表格資料具有貸款 ID 欄位、月初餘額，以及在每年每筆貸款收取的單利率。

最終使用者希望圖表物件按貸款 ID 顯示月初至今每筆貸款已累積的目前利息。雖然應用程式每週僅重新載入一次，但使用者還是希望每次物件或應用程式重新整理後，也會重新整理結果的內容。

載入指令碼

```
Loans:
Load
*
Inline 
[
loan_id,start_balance,rate
8188,$10000.00,0.024
8189,$15000.00,0.057
8190,$17500.00,0.024
8191,$21000.00,0.034
8192,$90000.00,0.084
];
```

結果

請執行下列動作：

1. 載入資料並開啟工作表。 建立新的表格。

2. 新增下列欄位作為維度。

   * `loan_id`

   * `start_balance`

3. 接下來，建立量值以計算累積的利息：

   `=start_balance*(rate*(today(1)-monthstart(today(1)))/365)`

4. 將量值的數字格式設定為金錢。

結果表格

| loan\_id | start\_balance | =start\_balance\*(rate\*(today(1)-monthstart(today(1)))/365) |
| --- | --- | --- |
| 8188 | $10000.00 | $16.44 |
| 8189 | $15000.00 | $58.56 |
| 8190 | $17500.00 | $28.77 |
| 8191 | $21000.00 | $48.90 |
| 8192 | $90000.00 | $517.81 |

`monthstart()` 函數使用傳回今日日期的 `today()` 函數作為其唯一引數，傳回目前月份的開始日期。以目前日期減去該結果後，再次使用 `today()` 函數，運算式會傳回本月目前已經過的天數。

然後此值乘以利率並除以 365，以傳回此期間產生的有效利率。然後該結果乘以貸款的開始餘額，以傳回本月目前已累積的利息。

因為 1 的值已作為運算式內 `today()` 函數的 `timer_mode` 引數，所以每次重新整理圖形物件時 (方法是開啟應用程式、重新整理頁面、在工作表之間移動等)，傳回的日期會針對目前日期，且結果會隨之重新整理。