# dayend - 脚本和图表函数

此函数用于返回与 time 中包含的一天的最后毫秒的时间戳对应的值。默认的输出格式为在脚本中所设置的 TimestampFormat。

语法：

DayEnd(time[, [period\_no[, day\_start]])

适用场景

当用户希望计算使用当天尚未发生的分数时，`  dayend() ` 函数通常用作表达式的一部分。例如，计算当天仍将发生的总费用。

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| time | 要求值的时间戳。 |
| period\_no | period\_no 为整数，或解算为整数的表达式，其中值 0 表示该天包含 time。period\_no 为负数表示前几天，正数表示随后的几天。 |
| day\_start | 要指定不想从某一日的午夜开始工作，可在 day\_start 中指定一个偏移作为某日内时间的小数。例如，0.125 表示上午 3 点。<br><br>换句话说，要创建偏移，请将开始时间除以 24 小时。例如，对于 7:00 AM 开始的一天，使用分数 7/24。 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `SET DateFormat` 语句中指定。由于区域设置和其他因素，系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者，您可以更改加载脚本中的格式以匹配这些示例。

应用程序中的默认区域设置基于安装 Qlik Sense 的计算机或服务器的区域系统设置。如果您访问的 Qlik Sense 服务器设置为瑞典，则数据加载编辑器将使用瑞典地区设置的日期、时间和货币。这些区域格式设置与 Qlik Sense 用户界面中显示的语言无关。Qlik Sense 将以与您使用的浏览器相同的语言显示。

函数示例

| 示例 | 结果 |
| --- | --- |
| dayend('01/25/2013 16:45:00') | Returns 01/25/2013 23:59:59. PM |
| dayend('01/25/2013 16:45:00', -1) | Returns 01/24/2013 23:59:59. PM |
| dayend('01/25/2013 16:45:00', 0, 0.5) | Returns 01/26/2013 11:59:59. PM |

## 示例 1 - 基本脚本

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

#### 加载脚本和结果

概览

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

加载脚本包含：

* 包含日期列表的数据集，加载到名为 "Calendar" 的表中。

* 默认 `DateFormat` 系统变量 `(MM/DD/YYYY)`。

* 使用 `dayend()` 功能创建另一个名为 '`EOD_timestamp`' 的字段的前置 Load。

加载脚本

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT'; 

Calendar: 
    Load 
      date, 
      dayend(date) as EOD_timestamp 
      ; 
Load 
date 
Inline  
[ 
date 
03/11/2022 1:47:15 AM 
03/12/2022 4:34:58 AM 
03/13/2022 5:15:55 AM 
03/14/2022 9:25:14 AM 
03/15/2022 10:06:54 AM 
03/16/2022 10:44:42 AM 
03/17/2022 11:33:30 AM 
03/18/2022 12:58:14 PM 
03/19/2022 4:23:12 PM 
03/20/2022 6:42:15 PM 
03/21/2022 7:41:16 PM 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `date`

* `EOD_timestamp`

结果表

| date | EOD\_timestamp |
| --- | --- |
| 03/11/2022 1:47:15 AM | 3/11/2022 11:59:59 PM |
| 03/12/2022 4:34:58 AM | 3/12/2022 11:59:59 PM |
| 03/13/2022 5:15:55 AM | 3/13/2022 11:59:59 PM |
| 03/14/2022 9:25:14 AM | 3/14/2022 11:59:59 PM |
| 03/15/2022 10:06:54 AM | 3/15/2022 11:59:59 PM |
| 03/16/2022 10:44:42 AM | 3/16/2022 11:59:59 PM |
| 03/17/2022 11:33:30 AM | 3/17/2022 11:59:59 PM |
| 03/18/2022 12:58:14 PM | 3/18/2022 11:59:59 PM |
| 03/19/2022 4:23:12 PM | 3/19/2022 11:59:59 PM |
| 03/20/2022 6:42:15 PM | 3/20/2022 11:59:59 PM |
| 03/21/2022 7:41:16 PM | 3/21/2022 11:59:59 PM |

如上表所示，为数据集中的每个日期生成了一天结束时间戳。时间戳采用系统变量 `TimestampFormat M/D/YYYY h:mm:ss[.fff] TT` 的格式。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概览

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

您将把包含服务预订的数据集加载到名为“Services”的表中。

数据集包括以下字段：

* `service_id`

* `service_date`

* `amount`

您将在表中创建两个新字段：

* `deposit_due_date`：应收到存款的日期。这是 `service_date` 前三天的一天结束时间。

* `final_payment_due_date`：应收到最终付款的日期。这是 `service_date` 后七天的一天结束时间。

上述两个字段是在前置 Load 中使用 `dayend()` 函数创建的，它们提供前两个参数，`time` 以及 `period_no`。

加载脚本

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT'; 
						
Services: 
   Load 
     *, 
     dayend(service_date,-3) as deposit_due_date, 
     dayend(service_date,7) as final_payment_due_date 
     ; 
Load 
service_id, 
service_date, 
amount 
Inline  
[ 
service_id, service_date,amount
1,03/11/2022 9:25:14 AM,231.24 
2,03/12/2022 10:06:54 AM,567.28 
3,03/13/2022 10:44:42 AM,364.28 
4,03/14/2022 11:33:30 AM,575.76 
5,03/15/2022 12:58:14 PM,638.68 
6,03/16/2022 4:23:12 PM,785.38 
7,03/17/2022 6:42:15 PM,967.46 
8,03/18/2022 7:41:16 PM,287.67 
9,03/19/2022 8:14:15 PM,764.45 
10,03/20/2022 9:23:51 PM,875.43 
11,03/21/2022 10:04:41 PM,957.35 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `service_date`

* `deposit_due_date`

* `final_payment_due_date`

结果表

| service\_date | deposit\_due\_date | final\_payment\_due\_date |
| --- | --- | --- |
| 03/11/2022 9:25:14 AM | 3/8/2022 11:59:59 PM | 3/18/2022 11:59:59 PM |
| 03/12/2022 10:06:54 AM | 3/9/2022 11:59:59 PM | 3/19/2022 11:59:59 PM |
| 03/13/2022 10:44:42 AM | 3/10/2022 11:59:59 PM | 3/20/2022 11:59:59 PM |
| 03/14/2022 11:33:30 AM | 3/11/2022 11:59:59 PM | 3/21/2022 11:59:59 PM |
| 03/15/2022 12:58:14 PM | 3/12/2022 11:59:59 PM | 3/22/2022 11:59:59 PM |
| 03/16/2022 4:23:12 PM | 3/13/2022 11:59:59 PM | 3/23/2022 11:59:59 PM |
| 03/17/2022 6:42:15 PM | 3/14/2022 11:59:59 PM | 3/24/2022 11:59:59 PM |
| 03/18/2022 7:41:16 PM | 3/15/2022 11:59:59 PM | 3/25/2022 11:59:59 PM |
| 03/19/2022 8:14:15 PM | 3/16/2022 11:59:59 PM | 3/26/2022 11:59:59 PM |
| 03/20/2022 9:23:51 PM | 3/17/2022 11:59:59 PM | 3/27/2022 11:59:59 PM |
| 03/21/2022 10:04:41 PM | 3/18/2022 11:59:59 PM | 3/28/2022 11:59:59 PM |

新字段的值位于 `TimestampFormat M/D/YYYY h:mm:ss[.fff] TT` 中。因为使用了函数 `dayend()`，所以时间戳值都是一天中的最后一毫秒。

由于 `dayend()` 函数中传递的第二个参数为负数，存款到期日值比服务日期早三天。

由于 `dayend()` 函数中传递的第二个参数为正数，最终付款到期日值为服务日期后七天。

## 示例 3 – day\_start script

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

#### 加载脚本和结果

概览

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

本示例中使用的数据集和场景与前一示例中的相同。

与上一个示例一样，您将创建两个新字段：

* `deposit_due_date`：应收到存款的日期。这是 `service_date` 前三天的一天结束时间。

* `final_payment_due_date`：应收到最终付款的日期。这是 `service_date` 后七天的一天结束时间。

但是，您的公司希望在工作日从下午 5 点开始到第二天下午 5 点结束的政策下运营。然后，您的公司可以监控在这些工作时间内发生的交易。

为了满足这些要求，在前置 Load 中使用 `dayend()` 函数创建了上述两个字段，并使用所有三个参数 `time`、`period_no` 和 `day_start`。

加载脚本

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT'; 

Services: 
   Load 
     *, 
     dayend(service_date,-3,17/24) as deposit_due_date, 
     dayend(service_date,7,17/24) as final_payment_due_date 
     ; 
Load 
service_id, 
service_date, 
amount 
Inline  
[ 
service_id, service_date,amount 
1,03/11/2022 9:25:14 AM,231.24 
2,03/12/2022 10:06:54 AM,567.28 
3,03/13/2022 10:44:42 AM,364.28 
4,03/14/2022 11:33:30 AM,575.76 
5,03/15/2022 12:58:14 PM,638.68 
6,03/16/2022 4:23:12 PM,785.38 
7,03/17/2022 6:42:15 PM,967.46 
8,03/18/2022 7:41:16 PM,287.67 
9,03/19/2022 8:14:15 PM,764.45 
10,03/20/2022 9:23:51 PM,875.43 
11,03/21/2022 10:04:41 PM,957.35 
]; 
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `service_date`

* `deposit_due_date`

* `final_payment_due_date`

结果表

| service\_date | deposit\_due\_date | final\_payment\_due\_date |
| --- | --- | --- |
| 03/11/2022 9:25:14 AM | 3/8/2022 4:59:59 PM | 3/18/2022 4:59:59 PM |
| 03/12/2022 10:06:54 AM | 3/9/2022 4:59:59 PM | 3/19/2022 4:59:59 PM |
| 03/13/2022 10:44:42 AM | 3/10/2022 4:59:59 PM | 3/20/2022 4:59:59 PM |
| 03/14/2022 11:33:30 AM | 3/11/2022 4:59:59 PM | 3/21/2022 4:59:59 PM |
| 03/15/2022 12:58:14 PM | 3/12/2022 4:59:59 PM | 3/22/2022 4:59:59 PM |
| 03/16/2022 4:23:12 PM | 3/13/2022 4:59:59 PM | 3/23/2022 4:59:59 PM |
| 03/17/2022 6:42:15 PM | 3/14/2022 4:59:59 PM | 3/24/2022 4:59:59 PM |
| 03/18/2022 7:41:16 PM | 3/15/2022 4:59:59 PM | 3/25/2022 4:59:59 PM |
| 03/19/2022 8:14:15 PM | 3/16/2022 4:59:59 PM | 3/26/2022 4:59:59 PM |
| 03/20/2022 9:23:51 PM | 3/17/2022 4:59:59 PM | 3/27/2022 4:59:59 PM |
| 03/21/2022 10:04:41 PM | 3/18/2022 4:59:59 PM | 3/28/2022 4:59:59 PM |

虽然日期与示例 2 中的日期保持相同，但由于传递给 `dayend()` 函数的第三个参数 `day_start` 的值为 17/24，因此日期现在具有下午 5 点之前最后一毫秒的时间戳。

## 示例 4 – 图表示例

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

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

概览

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

本示例中使用的数据集和场景与前两个示例中的相同。公司希望在工作日从下午 5 点开始到第二天下午 5 点结束的政策下运营。

与上一个示例一样，您将创建两个新字段：

* deposit\_due\_date：应收到存款的日期。这是 service\_date 前三天的一天结束时间。

* final\_payment\_due\_date：应收到最终付款的日期。这是 service\_date 后七天的一天结束时间。

加载脚本

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT'; 

Services: 
Load 
service_id, 
service_date, 
amount 
Inline  
[ 
service_id, service_date,amount 
1,03/11/2022 9:25:14 AM,231.24 
2,03/12/2022 10:06:54 AM,567.28 
3,03/13/2022 10:44:42 AM,364.28 
4,03/14/2022 11:33:30 AM,575.76 
5,03/15/2022 12:58:14 PM,638.68 
6,03/16/2022 4:23:12 PM,785.38 
7,03/17/2022 6:42:15 PM,967.46 
8,03/18/2022 7:41:16 PM,287.67 
9,03/19/2022 8:14:15 PM,764.45 
10,03/20/2022 9:23:51 PM,875.43 
11,03/21/2022 10:04:41 PM,957.35 
]; 
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

service\_date。

要创建 deposit\_due\_date 字段，请创建此度量：

=dayend(service\_date,-3,17/24)。

然后，要创建 final\_payment\_due\_date 字段，请创建此度量：

=dayend(service\_date,7,17/24)。

结果表

| service\_date | =dayend(service\_date,-3,17/24) | =dayend(service\_date,7,17/24 |
| --- | --- | --- |
| 03/11/2022 | 3/8/2022 16:59:59 PM | 3/18/2022 16:59:59 PM |
| 03/12/2022 | 3/9/2022 16:59:59 PM | 3/19/2022 16:59:59 PM |
| 03/13/2022 | 3/10/2022 16:59:59 PM | 3/20/2022 16:59:59 PM |
| 03/14/2022 | 3/11/2022 16:59:59 PM | 3/21/2022 16:59:59 PM |
| 03/15/2022 | 3/12/2022 16:59:59 PM | 3/22/2022 16:59:59 PM |
| 03/16/2022 | 3/13/2022 16:59:59 PM | 3/23/2022 16:59:59 PM |
| 03/17/2022 | 3/14/2022 16:59:59 PM | 3/24/2022 16:59:59 PM |
| 03/18/2022 | 3/15/2022 16:59:59 PM | 3/25/2022 16:59:59 PM |
| 03/19/2022 | 3/16/2022 16:59:59 PM | 3/26/2022 16:59:59 PM |
| 03/20/2022 | 3/17/2022 16:59:59 PM | 3/27/2022 16:59:59 PM |
| 03/21/2022 | 3/18/2022 16:59:59 PM | 3/28/2022 16:59:59 PM |

新字段的值位于 TimestampFormat M/D/YYYY h:mm:ss[.fff] TT 中。因为使用了函数 dayend()，所以时间戳值都是一天中的最后一毫秒。

由于 dayend() 函数中传递的第二个参数为负数，付款到期日值比服务日期早三天。

由于 dayend() 函数中传递的第二个参数为正数，最终付款到期日值为服务日期后七天。

但由于传递给 dayend() 函数的第三个参数 day\_start 的值为 17/24，因此日期现在具有下午 5 点之前最后一毫秒的时间戳。

## 了解详情

* [从之前加载的表格中加载数据](https://help.qlik.com/zh-CN/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm)

参数

| 参数 | 描述 |
| --- | --- |
| time | 要求值的时间戳。 |
| period\_no | period\_no 为整数，或解算为整数的表达式，其中值 0 表示该天包含 time。period\_no 为负数表示前几天，正数表示随后的几天。 |
| day\_start | 要指定不想从某一日的午夜开始工作，可在 day\_start 中指定一个偏移作为某日内时间的小数。例如，0.125 表示上午 3 点。 |