# lunarweekend 脚本和图表功能

此函数用于返回与包含 date 的阴历周的最后毫秒的时间戳对应的值。Qlik Sense 中的农历周定义为将 1 月 1 日计算为一周的第一天，除一年的最后一周外，将正好包含七天。

语法：

LunarweekEnd(date[, period\_no[, first\_week\_day]])

返回数据类型： 双

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

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

`lunarweekend()`lunarweekend() 函数的示例图表 ![在此处添加文本.....!!!!!!](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekend-general.png)

`lunarweekend()` 函数决定 `date` 属于哪个农历周。然后以日期格式返回该周最后一毫秒的时间戳。

参数

| 参数 | 描述 |
| --- | --- |
| date | 要评估的日期或时间戳。 |
| period\_no | period\_no 为整数，或解算为整数的表达式，其中值 0 表示该阴历周包含 date。period\_no 为负数表示前几个阴历星期，为正数表示随后的几个阴历星期。 |
| first\_week\_day | 偏移可以大小或小于零。这可以按指定的天数和/或某日内时间的小数对更改一年的开始。 |

## 适合使用它的情况

当用户希望计算使用当周尚未发生的分数时，`lunarweekend()` 函数通常用作表达式的一部分。与 `weekend()` 函数不同，每个日历年的最后一个农历周将于 12 月 31 日结束。例如，`lunarweekend()` 函数可用于计算一周内尚未发生的利息。

函数示例

| 示例 | 结果 |
| --- | --- |
| `lunarweekend('01/12/2013')` | 返回 01/14/2013 23:59:59。 |
| `lunarweekend('01/12/2013', -1)` | 返回 01/07/2013 23:59:59。 |
| `lunarweekend('01/12/2013', 0, 1)` | 返回 01/15/2013 23:59:59。 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：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/lunarweekend.htm)

#### 加载脚本和结果

概述

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

加载脚本包含：

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

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

* 创建字段 `  end_of_week `，返回交易发生的农历周结束的时间戳。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekend(date) as end_of_week,
        timestamp(lunarweekend(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/07/2022 | 1/7/2022 11:59:59 PM |
| 1/19/2022 | 01/21/2022 | 1/21/2022 11:59:59 PM |
| 2/5/2022 | 02/11/2022 | 2/11/2022 11:59:59 PM |
| 2/28/2022 | 03/04/2022 | 3/4/2022 11:59:59 PM |
| 3/16/2022 | 03/18/2022 | 3/18/2022 11:59:59 PM |
| 4/1/2022 | 04/01/2022 | 4/1/2022 11:59:59 PM |
| 5/7/2022 | 05/13/2022 | 5/13/2022 11:59:59 PM |
| 5/16/2022 | 05/20/2022 | 5/20/2022 11:59:59 PM |
| 6/15/2022 | 06/17/2022 | 6/17/2022 11:59:59 PM |
| 6/26/2022 | 07/01/2022 | 7/1/2022 11:59:59 PM |
| 7/9/2022 | 07/15/2022 | 7/15/2022 11:59:59 PM |
| 7/22/2022 | 07/22/2022 | 7/22/2022 11:59:59 PM |
| 7/23/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
| 7/27/2022 | 07/29/2022 | 7/29/2022 11:59:59 PM |
| 8/2/2022 | 08/05/2022 | 8/5/2022 11:59:59 PM |
| 8/8/2022 | 08/12/2022 | 8/12/2022 11:59:59 PM |
| 8/19/2022 | 08/19/2022 | 8/19/2022 11:59:59 PM |
| 9/26/2022 | 09/30/2022 | 9/30/2022 11:59:59 PM |
| 10/14/2022 | 10/14/2022 | 10/14/2022 11:59:59 PM |
| 10/29/2022 | 11/04/2022 | 11/4/2022 11:59:59 PM |

通过使用 `lunarweekend()` 函数并将 `end_of_week` 字段作为函数的参数传递，在前置 Load 语句中创建了 `date` 字段。

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

`lunarweekend()` 函数图表，示例没有额外参数

`lunarweekend()` 函数图表，示例没有额外参数

`lunarweekend()`lunarweekend() 函数图表，示例没有额外参数 ![显示 lunarweekend 函数如何将每个事务的输入日期转换为该日期发生的农历周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekend-examples-no-add-arg.png)

交易 8189 发生在 1 月 19 日。`lunarweekend()` 函数确定农历周从 1 月 15 日开始。因此，该交易 `end_of_week` 的值返回农历周的最后一毫秒，即 1 月 21 日下午 11:59:59。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概述

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

加载脚本包含：

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

* 创建一个字段 `previous_lunar_week_end`，该字段返回事务发生前的农历周末的时间戳。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekend(date,-1) as previous_lunar_week_end,
        timestamp(lunarweekend(date,-1)) as previous_lunar_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_lunar_week_end`

* `previous_lunar_week_end_timestamp`

结果表

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

在本例中，由于 `lunarweekend()` 函数中使用了为 -1 的 `period_no` 作为偏移量参数，因此该函数首先标识交易发生的农历周。然后，它在一周前移动，并确定农历周的最后一毫秒。

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

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

`lunarweekend()`lunarweekend() 函数的图表，period\_no 示例 ![显示 lunarweekend 函数如何将每个事务的输入日期转换为该日期发生的农历周最后一毫秒的时间戳的图。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-lunarweekend-examples-period-no.png)

交易 8189 发生在 1 月 19 日。`lunarweekend()` 函数确定农历周从 1 月 15 日开始。因此，上一个农历周开始于 1 月 8 日，结束于 1 月 14 日晚上 11:59:59；这是为 `previous_lunar_week_end` 字段返回的值。

## 示例 3 – first\_week\_day

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

#### 加载脚本和结果

概述

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

加载脚本包含与第一个示例相同的数据集和场景。然而，在这个例子中，我们将农历周设置为 1 月 6 日开始。

加载脚本

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

Transactions:
    Load
        *,
        lunarweekend(date,0,4) as end_of_week,
timestamp(lunarweekend(date,0,4)) 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/11/2022 | 1/11/2022 11:59:59 PM |
| 1/19/2022 | 01/25/2022 | 1/25/2022 11:59:59 PM |
| 2/5/2022 | 02/08/2022 | 2/8/2022 11:59:59 PM |
| 2/28/2022 | 03/01/2022 | 3/1/2022 11:59:59 PM |
| 3/16/2022 | 03/22/2022 | 3/22/2022 11:59:59 PM |
| 4/1/2022 | 04/05/2022 | 4/5/2022 11:59:59 PM |
| 5/7/2022 | 05/10/2022 | 5/10/2022 11:59:59 PM |
| 5/16/2022 | 05/17/2022 | 5/17/2022 11:59:59 PM |
| 6/15/2022 | 06/21/2022 | 6/21/2022 11:59:59 PM |
| 6/26/2022 | 06/28/2022 | 6/28/2022 11:59:59 PM |
| 7/9/2022 | 07/12/2022 | 7/12/2022 11:59:59 PM |
| 7/22/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
| 7/23/2022 | 07/26/2022 | 7/26/2022 11:59:59 PM |
| 7/27/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
| 8/2/2022 | 08/02/2022 | 8/2/2022 11:59:59 PM |
| 8/8/2022 | 08/09/2022 | 8/9/2022 11:59:59 PM |
| 8/19/2022 | 08/23/2022 | 8/23/2022 11:59:59 PM |
| 9/26/2022 | 09/27/2022 | 9/27/2022 11:59:59 PM |
| 10/14/2022 | 10/18/2022 | 10/18/2022 11:59:59 PM |
| 10/29/2022 | 11/01/2022 | 11/1/2022 11:59:59 PM |

在本例中，由于 `lunarweekend()` 函数中使用了参数 `first_week_date`，因此它将年初从 1 月 1 日偏移到 1 月 5 日。

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

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

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

交易 8189 发生在 1 月 19 日。由于农历周从 1 月 5 日开始，`lunarweekend()` 函数确定包含 1 月 19 日的农历周也从 1 月 19 号开始。因此，农历周的结束发生在 1 月 25 日晚上 11:59:59；这是为 `end_of_week` 字段返回的值。

## 示例 4 – 图表对象

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lunarweekend.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。

添加以下度量：

=lunarweekend(date)

=timestamp(lunarweekend(date))

结果表

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

通过使用 lunarweekend() 函数并将 date 字段作为函数的参数传递，在图表对象中创建 end\_of\_week 度量。

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

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

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

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

交易 8189 发生在 1 月 19 日。lunarweekend() 函数确定农历周从 1 月 15 日开始。因此，该交易 end\_of\_week 的值返回农历周的最后一毫秒，即 1 月 21 日下午 11:59:59。

## 示例 5 – 场景

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/lunarweekend.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. 加载数据并打开工作表。新建表格。

2. 添加以下字段作为维度：

   * employee\_id

   * employee\_name

3. 接下来，创建以下度量来计算累计利息：

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

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

结果表

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

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

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