# weekend 脚本和图表功能

此函数返回一个值，该值对应于包含 date 的日历周的最后一天的最后一毫秒的时间戳。默认的输出格式为在脚本中所设置的 DateFormat。

语法：

WeekEnd(timestamp [, period\_no [, first\_week\_day ]])

返回数据类型： 双

`weekend()` 函数确定日期属于哪个周。然后以日期格式返回该周最后一毫秒的时间戳。一周的第一天由 `FirstWeekDay` 环境变量确定。但是，这可以被 `weekend()` 函数中的 `first_week_day` 参数取代。

参数

| 参数 | 描述 |
| --- | --- |
| timestamp | 要评估的日期或时间戳。 |
| period\_no | shift 为整数，其中值 0 表示该星期包含 date。shift 为负数，表示前几星期，正数表示随后的几星期。 |
| first\_week\_day | 指定一周的开始日期。如果忽略，使用 FirstWeekDay 变量的值。<br><br>first\_week\_day 可能的值为：周一为 0，周二为 1，周三为 2，周四为3，周五为 4，周六为 5，星期日为 6。<br><br>有关系统变量的详细信息，请参见[FirstWeekDay](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/NumberInterpretationVariables/FirstWeekDay.htm) |

## 适合使用它的情况

当用户希望计算使用指定日期的一周剩余天数时，`weekend()` 函数通常用作表达式的一部分。例如，如果用户想计算一周内尚未产生的总利息，则可以使用该方法。

以下示例假设：

```
SET FirstWeekDay=0;
```

| 示例 | 结果 |
| --- | --- |
| `weekend('01/10/2013')` | 返回 01/12/2013 23:59:59。 |
| `weekend('01/10/2013', -1)` | 返回 01/05/2013 23:59:59.。 |
| `weekend('01/10/2013', 0, 1)` | 返回 01/14/2013 23:59:59。 |

## 区域设置

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

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

示例：

如果您想要周和周数的 ISO 设置，请确保脚本中包含以下内容：

```
Set DateFormat   ='YYYY-MM-DD'; 
Set FirstWeekDay =0;    // Monday as first week day
Set BrokenWeeks  =0;    //(use unbroken weeks)
Set ReferenceDay =4;    // Jan 4th is always in week 1
```

如果需要 US 设置，请确保脚本中包含以下内容：

```
Set DateFormat   ='M/D/YYYY';
Set FirstWeekDay =6;    // Sunday as first week day
Set BrokenWeeks  =1;    //(use broken weeks)
Set ReferenceDay =1;    // Jan 1st is always in week 1
```

以上示例从 weekend() 函数中得出以下结果：

Weekend 函数示例

| 日期 | ISO 周末 | US 周末 |
| --- | --- | --- |
| 2020 年 12 月 26 日星期六 | 2020-12-27 | 12/26/2020 |
| 2020 年 12 月 27 日星期日 | 2020-12-27 | 1/2/2021 |
| 2020 年 12 月 28 日星期一 | 2021-01-03 | 1/2/2021 |
| 2020 年 12 月 29 日星期二 | 2021-01-03 | 1/2/2021 |
| 2020 年 12 月 30 日星期三 | 2021-01-03 | 1/2/2021 |
| 2020 年 12 月 31 日星期四 | 2021-01-03 | 1/2/2021 |
| 2021 年 1 月 1 日星期五 | 2021-01-03 | 1/2/2021 |
| 2021 年 1 月 2 日周六 | 2021-01-03 | 1/2/2021 |
| 2021 年 1 月 3 日星期日 | 2021-01-03 | 1/9/2021 |
| 2021 年 1 月 4 日星期一 | 2021-01-10 | 1/9/2021 |
| 2021 年 1 月 5 日星期二 | 2021-01-10 | 1/9/2021 |

信息注释ISO 列中的周末为星期日，US 列中的周末为周六。

## 示例 1 – 基本示例

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 包含 2022 年交易集的数据集，该数据集加载到名为 Transactions 的表中。

* 日期字段已以 DateFormat 系统变量 (MM/DD/YYYY) 格式提供。

* 创建字段 end\_of\_week，返回交易发生的周结束的时间戳。

加载脚本

```
SET FirstWeekDay=6;

Transactions:
    Load
        *,
        weekend(date) as end_of_week,
        timestamp(weekend(date)) as end_of_week_timestamp
        ;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* date

* end\_of\_week

* end\_of\_week\_timestamp

结果表

| 日期 | end\_of\_week | end\_of\_week\_timestamp |
| --- | --- | --- |
| 1/7/2022 | 01/08/2022 | 1/8/2022 11:59:59 PM |
| 1/19/2022 | 01/22/2022 | 1/22/2022 11:59:59 PM |
| 2/5/2022 | 02/05/2022 | 2/5/2022 11:59:59 PM |
| 2/28/2022 | 03/05/2022 | 3/5/2022 11:59:59 PM |
| 3/16/2022 | 03/19/2022 | 3/19/2022 11:59:59 PM |
| 4/1/2022 | 04/02/2022 | 4/2/2022 11:59:59 PM |
| 5/7/2022 | 05/07/2022 | 5/7/2022 11:59:59 PM |
| 5/16/2022 | 05/21/2022 | 5/21/2022 11:59:59 PM |
| 6/15/2022 | 06/18/2022 | 6/18/2022 11:59:59 PM |
| 6/26/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
| 7/9/2022 | 07/09/2022 | 7/9/2022 11:59:59 PM |
| 7/22/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
| 7/23/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
| 7/27/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
| 8/2/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
| 8/8/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
| 8/19/2022 | 08/20/2022 | 8/20/2022 11:59:59 PM |
| 9/26/2022 | 10/01/2022 | 10/1/2022 11:59:59 PM |
| 10/14/2022 | 10/15/2022 | 10/15/2022 11:59:59 PM |
| 10/29/2022 | 10/29/2022 | 10/29/2022 11:59:59 PM |

通过使用 weekend() 函数并将日期字段作为函数的参数传递，在前置 Load 语句中创建了 end\_of\_week 字段。

weekend() 函数标识日期值属于哪一周，并返回该周最后一毫秒的时间戳。

weekend() 函数的图表，基本示例

weekend() 函数的图表，基本示例

weekend()weekend() 函数的图表，基本示例 ![显示周末函数如何将交易日期转换为交易发生周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekend-examples-basic.png)

交易 8191 发生在 2 月 5 日。FirstWeekDay 系统变量将一周的第一天设置为星期日。weekend() 函数确定 2 月 5 日之后的第一个星期六，即本周的最后一个星期六是2月5号。因此，该事务的 end\_of\_week 值将返回当天的最后一毫秒，即二月 5 日午夜 11:59:59。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 创建一个字段 previous\_week\_end，该字段返回事务发生前的周开始的时间戳。

加载脚本

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

Transactions:
    Load
        *,
        weekend(date,-1) as previous_week_end,
        timestamp(weekend(date,-1)) as previous_week_end_timestamp
        ;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* date

* previous\_week\_end

* previous\_week\_end\_timestamp

结果表

| 日期 | end\_of\_week | end\_of\_week\_timestamp |
| --- | --- | --- |
| 1/7/2022 | 01/01/2022 | 1/1/2022 11:59:59 PM |
| 1/19/2022 | 01/15/2022 | 1/15/2022 11:59:59 PM |
| 2/5/2022 | 01/29/2022 | 1/29/2022 11:59:59 PM |
| 2/28/2022 | 02/26/2022 | 2/26/2022 11:59:59 PM |
| 3/16/2022 | 03/12/2022 | 3/12/2022 11:59:59 PM |
| 4/1/2022 | 03/26/2022 | 3/26/2022 11:59:59 PM |
| 5/7/2022 | 04/30/2022 | 4/30/2022 11:59:59 PM |
| 5/16/2022 | 05/14/2022 | 5/14/2022 11:59:59 PM |
| 6/15/2022 | 06/11/2022 | 6/11/2022 11:59:59 PM |
| 6/26/2022 | 06/25/2022 | 6/25/2022 11:59:59 PM |
| 7/9/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
| 7/22/2022 | 07/16/2022 | 7/16/2022 11:59:59 PM |
| 7/23/2022 | 07/16/2022 | 7/16/2022 11:59:59 PM |
| 7/27/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
| 8/2/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
| 8/8/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
| 8/19/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
| 9/26/2022 | 09/24/2022 | 9/24/2022 11:59:59 PM |
| 10/14/2022 | 10/08/2022 | 10/8/2022 11:59:59 PM |
| 10/29/2022 | 10/22/2022 | 10/22/2022 11:59:59 PM |

在本例中，由于 weekend() 函数中使用了为 -1 的 period\_no 作为偏移量参数，因此该函数首先标识交易发生的周。然后，它查找前一周，并确定该周的最后一毫秒。

weekend() 函数的图表，period\_no 示例

weekend() 函数的图表，period\_no 示例

weekend()weekend() 函数的图表，period\_no 示例 ![显示周末函数如何将交易日期转换为交易发生周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekend-examples-period-no.png)

交易 8196 发生在 6 月 15 日。weekend() 函数确定周从 6 月 12 日开始。因此，前一周于 6 月 11 日午夜 11:59:59 结束；这是为 previous\_week\_end 字段返回的值。

## 示例 3 – first\_week\_day

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

#### 加载脚本和结果

概述

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

加载脚本包含与第一个示例相同的数据集和场景。但是，在本例中，我们需要将星期二设置为工作周的第一天。

加载脚本

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

Transactions:
    Load
        *,
        weekend(date,0,1) as end_of_week,
        timestamp(weekend(date,0,1)) as end_of_week_timestamp,
        ;
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

* date

* end\_of\_week

* end\_of\_week\_timestamp

结果表

| 日期 | end\_of\_week | end\_of\_week\_timestamp |
| --- | --- | --- |
| 1/7/2022 | 01/10/2022 | 1/10/2022 11:59:59 PM |
| 1/19/2022 | 01/24/2022 | 1/24/2022 11:59:59 PM |
| 2/5/2022 | 02/07/2022 | 2/7/2022 11:59:59 PM |
| 2/28/2022 | 02/28/2022 | 2/28/2022 11:59:59 PM |
| 3/16/2022 | 03/21/2022 | 3/21/2022 11:59:59 PM |
| 4/1/2022 | 04/04/2022 | 4/4/2022 11:59:59 PM |
| 5/7/2022 | 05/09/2022 | 5/9/2022 11:59:59 PM |
| 5/16/2022 | 05/16/2022 | 5/16/2022 11:59:59 PM |
| 6/15/2022 | 06/20/2022 | 6/20/2022 11:59:59 PM |
| 6/26/2022 | 06/27/2022 | 6/27/2022 11:59:59 PM |
| 7/9/2022 | 07/11/2022 | 7/11/2022 11:59:59 PM |
| 7/22/2022 | 07/25/2022 | 7/25/2022 11:59:59 PM |
| 7/23/2022 | 07/25/2022 | 7/25/2022 11:59:59 PM |
| 7/27/2022 | 08/01/2022 | 8/1/2022 11:59:59 PM |
| 8/2/2022 | 08/08/2022 | 8/8/2022 11:59:59 PM |
| 8/8/2022 | 08/08/2022 | 8/8/2022 11:59:59 PM |
| 8/19/2022 | 08/22/2022 | 8/22/2022 11:59:59 PM |
| 9/26/2022 | 09/26/2022 | 9/26/2022 11:59:59 PM |
| 10/14/2022 | 10/17/2022 | 10/17/2022 11:59:59 PM |
| 10/29/2022 | 10/31/2022 | 10/31/2022 11:59:59 PM |

在本例中，因为 weekend() 函数中使用了为 1 的 first\_week\_date 参数，所以它将一周的第一天设置为星期二。

weekend() 函数的图表，first\_week\_day 示例

weekend() 函数的图表，first\_week\_day 示例

weekend()weekend() 函数的图表，first\_week\_day 示例 ![显示周末函数如何将交易日期转换为交易发生周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekend-examples-first-week-day.png)

交易 8191 发生在 2 月 5 日。weekend() 函数确定该日期之后的第一个星期一，即本周的结束时间和返回值，是 2 月 6 日午夜 11:59:59。

## 示例 4 – 图表对象

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

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

概述

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

加载脚本包含与第一个示例相同的数据集和场景。然而，在本例中，未更改的数据集被加载到应用程序中。返回交易发生时周末的时间戳的计算作为应用程序的图表对象中的度量创建。

加载脚本

```
Transactions:
Load
*
Inline
[
id,date,amount
8188,1/7/2022,17.17
8189,1/19/2022,37.23
8190,2/28/2022,88.27
8191,2/5/2022,57.42
8192,3/16/2022,53.80
8193,4/1/2022,82.06
8194,5/7/2022,40.39
8195,5/16/2022,87.21
8196,6/15/2022,95.93
8197,6/26/2022,45.89
8198,7/9/2022,36.23
8199,7/22/2022,25.66
8200,7/23/2022,82.77
8201,7/27/2022,69.98
8202,8/2/2022,76.11
8203,8/8/2022,25.12
8204,8/19/2022,46.23
8205,9/26/2022,84.21
8206,10/14/2022,96.24
8207,10/29/2022,67.67
];
```

结果

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

要计算交易发生的一周的开始时间，请添加以下度量：

* =weekend(date)

* =timestamp(weekend(date))

结果表

| 日期 | =weekend(date) | =timestamp(weekend(date)) |
| --- | --- | --- |
| 1/7/2022 | 01/08/2022 | 1/8/2022 11:59:59 PM |
| 1/19/2022 | 01/22/2022 | 1/22/2022 11:59:59 PM |
| 2/5/2022 | 02/05/2022 | 2/5/2022 11:59:59 PM |
| 2/28/2022 | 03/05/2022 | 3/5/2022 11:59:59 PM |
| 3/16/2022 | 03/19/2022 | 3/19/2022 11:59:59 PM |
| 4/1/2022 | 04/02/2022 | 4/2/2022 11:59:59 PM |
| 5/7/2022 | 05/07/2022 | 5/7/2022 11:59:59 PM |
| 5/16/2022 | 05/21/2022 | 5/21/2022 11:59:59 PM |
| 6/15/2022 | 06/18/2022 | 6/18/2022 11:59:59 PM |
| 6/26/2022 | 07/02/2022 | 7/2/2022 11:59:59 PM |
| 7/9/2022 | 07/09/2022 | 7/9/2022 11:59:59 PM |
| 7/22/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
| 7/23/2022 | 07/23/2022 | 7/23/2022 11:59:59 PM |
| 7/27/2022 | 07/30/2022 | 7/30/2022 11:59:59 PM |
| 8/2/2022 | 08/06/2022 | 8/6/2022 11:59:59 PM |
| 8/8/2022 | 08/13/2022 | 8/13/2022 11:59:59 PM |
| 8/19/2022 | 08/20/2022 | 8/20/2022 11:59:59 PM |
| 9/26/2022 | 10/01/2022 | 10/1/2022 11:59:59 PM |
| 10/14/2022 | 10/15/2022 | 10/15/2022 11:59:59 PM |
| 10/29/2022 | 10/29/2022 | 10/29/2022 11:59:59 PM |

通过使用 weekend()函数并将日期字段作为函数的参数传递，在图表对象中创建了 end\_of\_week 度量。weekend() 函数标识日期值属于哪个周，并返回该周最后一毫秒的时间戳。

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

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

weekend()weekend() 函数的图表，图表对象示例 ![显示周末函数如何将交易日期转换为交易发生周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-weekend-examples-chart-object.png)

交易 8191 发生在 2 月 5 日。FirstWeekDay 系统变量将一周的第一天设置为星期日。weekend() 函数确定 2 月 5 日之后的第一个星期六，即本周的最后一个星期六是2月5号。因此，该事务的 end\_of\_week 值将返回当天的最后一毫秒，即二月 5 日午夜 11:59:59。

## 示例 5 – 场景

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

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

概述

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

加载脚本包含：

* 加载到名为 Employee\_Expenses 的表中的数据集。

* 由员工 ID、员工姓名和每个员工的平均每日费用报销组成的数据。

最终用户需要一个图表对象，该图表对象按员工 ID 和员工姓名显示周剩余时间内仍要发生的估计费用索赔。

加载脚本

```
Employee_Expenses:
Load
*
Inline
[
employee_id,employee_name,avg_daily_claim
182,Mark, $15
183,Deryck, $12.5
184,Dexter, $12.5
185,Sydney,$27
186,Agatha,$18
];
```

结果

执行以下操作：

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

   * employee\_id

   * employee\_name

2. 接下来，创建一个度量来计算累计利息：

   =(weekend(today(1))-today(1))\*avg\_daily\_claim

3. 将度量的数字格式设置为金额。

结果表

| EmployeeID | employee\_name | =(weekend(today(1))-today(1))\*avg\_daily\_claim |
| --- | --- | --- |
| 182 | Mark | $90.00 |
| 183 | Deryck | $75.00 |
| 184 | Dexter | $75.00 |
| 185 | Sydney | $162.00 |
| 186 | Agatha | $108.00 |

weekend() 函数使用今天的日期作为唯一参数，返回当前周的结束日期。然后，通过从周结束日期中减去今天的日期，表达式返回本周剩余的天数。

然后将该值乘以每个员工的平均每日费用索赔，以计算每个员工在剩余周预计提出的索赔的估计值。