# inday 脚本和图表功能

此函数用于返回 True，如果 timestamp 位于包含 base\_timestamp 的一天以内。

语法：

InDay (timestamp, base\_timestamp, period\_no[, day\_start])

`inday` 函数的图表

`inday` 函数的图表

`inday`inday 函数的图表 ![该图显示了如何使用 inday 函数识别时间段并基于该段返回布尔结果。](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-inday-diagram.png)

`inday()` 函数使用`base_timestamp` 参数来标识时间戳属于哪一天。一天的开始时间默认为午夜；但是可以使用 `inday()` 函数的 `day_start` 参数更改一天的开始时间。一旦定义了这一天，当将规定的时间戳值与当天进行比较时，该函数将返回布尔结果。

适合使用它的情况

`inday()` 函数返回布尔结果。通常，这种类型的函数将用作 `if expression` 中的条件。这将返回一个聚合或计算，具体取决于评估的日期是否发生在相关时间戳的当天。

例如，`inday()` 函数可用于识别给定日期内制造的所有设备。

返回数据类型： 布尔值

在 Qlik Sense 中，布尔 true 值由 -1 表示，false 值由 0 表示。

参数

| 参数 | 描述 |
| --- | --- |
| `timestamp` | 想要用来与 `base_timestamp` 进行比较的日期和时间。 |
| `base_timestamp` | 日期和时间用于计算时间戳的值。 |
| `period_no` | 该天可通过 `period_no` 偏移。`period_no` 为整数，其中值 0 表示该天包含 `base_timestamp`。`period_no` 为负数表示前几天，正数表示随后的几天。 |
| `day_start` | 如果不想从每一日的午夜开始处理，可指定一个偏移作为某日内时间的小数 `day_start`。例如，0.125 表示上午 3 点。 |

## 区域设置

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

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

函数示例

| 示例 | 结果 |
| --- | --- |
| `inday` ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0) | 返回 True |
| ` inday  `('01/12/2006 12:23:00 PM', '01/13/2006 12:00:00 AM', 0) | 返回 False |
| `inday` ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1) | 返回 False |
| `(inday`'01/11/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', -1) | 返回 True |
| `inday` ('01/12/2006 12:23:00 PM', '01/12/2006 12:00:00 AM', 0, 0.5) | 返回 False |
| `inday` ('01/12/2006 11:23:00 AM', '01/12/2006 12:00:00 AM', 0, 0.5) | 返回 True |

## 示例 1 – LOAD 语句（脚本）

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

#### 加载脚本和结果

概述

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

加载脚本包含：

* 按时间戳包含交易的数据集，加载到名为 `Transactions` 的表格中。

* 以 `TimeStamp` 系统变量 `(M/D/YYYY h:mm:ss[.fff] TT)` 格式提供的日期字段。

* 包含设置为 `in_day` 字段的 `inday()` 函数的前置 Load。

加载脚本

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

Transactions:
    Load
        *,
        inday(date,'01/05/2022 12:00:00 AM', 0) as in_day
        ;
Load
*
Inline 
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
```

结果

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

* `date`

* `in_day`

结果表

| 日期 | 日内 |
| --- | --- |
| 01/01/2022 7:34:46 PM | 0 |
| 01/01/2022 10:10:22 PM | 0 |
| 01/02/2022 8:35:54 AM | 0 |
| 01/03/2022 2:21:53 PM | 0 |
| 01/04/2022 6:49:38 PM | 0 |
| 01/04/2022 10:58:34 PM | 0 |
| 01/05/2022 5:40:49 AM | -1 |
| 01/05/2022 11:29:38 AM | -1 |
| 01/05/2022 7:04:57 PM | -1 |
| 01/06/2022 8:49:09 AM | 0 |

`in_day` 字段是在前置 Load 语句中使用 `inday()`函数创建的，并将日期字段、1 月 5 日的硬编码时间戳和为 `0` 的 `period_no` 作为函数的参数传递。

## 示例 2 – period\_no

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

#### 加载脚本和结果

概述

加载脚本使用与第一个示例中相同的数据集和场景。

然而，在本例中，任务是计算交易日期是否发生在 1 月 5 日前两天。

加载脚本

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

Transactions:
    Load
        *,
        inday(date,'01/05/2022 12:00:00 AM', -2) as in_day
        ;
Load
*
Inline 
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
```

结果

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

* `date`

* `in_day`

结果表

| 日期 | 日内 |
| --- | --- |
| 01/01/2022 7:34:46 PM | 0 |
| 01/01/2022 10:10:22 PM | 0 |
| 01/02/2022 8:35:54 AM | 0 |
| 01/03/2022 2:21:53 PM | -1 |
| 01/04/2022 6:49:38 PM | 0 |
| 01/04/2022 10:58:34 PM | 0 |
| 01/05/2022 5:40:49 AM | 0 |
| 01/05/2022 11:29:38 AM | 0 |
| 01/05/2022 7:04:57 PM | 0 |
| 01/06/2022 8:49:09 AM | 0 |

在本例中，由于 `inday()` 函数中使用了为 `-2` 的 `period_no` 作为偏移参数，因此函数确定每个交易日期是否发生在 1 月 3 日。这可以在输出表中进行验证，其中一个交易返回的布尔结果为 TRUE。

## 示例 3 – day\_start

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

#### 加载脚本和结果

概述

加载脚本使用与之前示例中相同的数据集和场景。

然而，在本例中，公司的政策是工作日从早上 7 点开始，到早上 7 点结束。

加载脚本

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

Transactions:
    Load
        *,
        inday(date,'01/05/2022 12:00:00 AM', 0, 7/24) as in_day
        ;
Load
*
Inline 
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
```

结果

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

* `date`

* `in_day`

结果表

| 日期 | 日内 |
| --- | --- |
| 01/01/2022 7:34:46 PM | 0 |
| 01/01/2022 10:10:22 PM | 0 |
| 01/02/2022 8:35:54 AM | 0 |
| 01/03/2022 2:21:53 PM | 0 |
| 01/04/2022 6:49:38 PM | -1 |
| 01/04/2022 10:58:34 PM | -1 |
| 01/05/2022 5:40:49 AM | -1 |
| 01/05/2022 11:29:38 AM | 0 |
| 01/05/2022 7:04:57 PM | 0 |
| 01/06/2022 8:49:09 AM | 0 |

由于 `inday()` 函数中使用了 7/24 的 `start_day` 参数，即上午 7 点，因此函数确定每个交易日期是否发生在 1 月 4 日上午 7 点和 1 月 5 日早上 7 点之前。

这可以在输出表中进行验证，其中 1 月 4 日早上 7 点之后发生的交易返回布尔值结果 TRUE，而 1 月 5 日早上 7 点之后发生的事务返回布尔值结果 FALSE。

## 示例 4–图表对象（图表）

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

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

概述

加载脚本使用与之前示例中相同的数据集和场景。

然而，在本例中，未更改的数据集被加载到应用程序中。您将通过在图表对象中创建度量来计算以确定交易是否在 1 月 5 日发生。

加载脚本

```

Transactions:
Load
*
Inline 
[
id,date,amount
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
```

结果

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

* `date`

要计算交易是否在 1 月 5 日发生，请创建以下度量：

`=inday(date,'01/05/2022 12:00:00 AM',0)`

结果表

| 日期 | inday(date,'01/05/2022 12:00:00 AM',0) |
| --- | --- |
| 01/01/2022 7:34:46 PM | 0 |
| 01/01/2022 10:10:22 PM | 0 |
| 01/02/2022 8:35:54 AM | 0 |
| 01/03/2022 2:21:53 PM | 0 |
| 01/04/2022 6:49:38 PM | 0 |
| 01/04/2022 10:58:34 PM | 0 |
| 01/05/2022 5:40:49 AM | -1 |
| 01/05/2022 11:29:38 AM | -1 |
| 01/05/2022 7:04:57 PM | -1 |
| 01/06/2022 8:49:09 AM | 0 |

## 示例 5 – 场景

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

#### 加载脚本和结果

概述

在本例中，已确定由于设备错误，1 月 5 日制造的产品存在缺陷。最终用户想要一个图表对象，该对象按日期显示制造的“有缺陷”或“无缺陷”产品的状态以及 1 月 5 日制造的产品的成本。

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

加载脚本包含：

* 加载到名为“Products”的表中的数据集。

* 表格包含以下字段：

  * product ID

  * 制造时间

  * cost price

加载脚本

```

Products:
Load
*
Inline 
[
product_id,manufacture_date,cost_price
9497,'01/01/2022 7:34:46 PM',13.24
9498,'01/01/2022 10:10:22 PM',31.43
9499,'01/02/2022 8:35:54 AM',36.34
9500,'01/03/2022 2:21:53 PM',51.75
9501,'01/04/2022 6:49:38 PM',15.35
9502,'01/04/2022 10:58:34 PM',74.34
9503,'01/05/2022 5:40:49 AM',73.53
9504,'01/05/2022 11:29:38 AM',50.00
9505,'01/05/2022 7:04:57 PM',47.25
9506,'01/06/2022 8:49:09 AM',74.23
];
```

结果

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

=dayname(manufacture\_date)

创建以下度量：

* =if(only(InDay(manufacture\_date,makedate(2022,01,05),0)),'Defective','Faultless')

* =sum(cost\_price)

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

在外观下，关闭总计。

结果表

| dayname(生产日期) | =if(only(InDay(manufacture\_date,makedate(2022,01,05),0)),'有缺陷','无缺陷') | =sum(cost\_price) |
| --- | --- | --- |
| 01/01/2022 | Faultless | 44.67 |
| 01/02/2022 | Faultless | 36.34 |
| 01/03/2022 | Faultless | 51.75 |
| 01/04/2022 | Faultless | 89.69 |
| 01/05/2022 | Defective | 170.78 |
| 01/06/2022 | Faultless | 74.23 |

inday() 函数在评估每个产品的制造日期时返回布尔值。对于1月5日生产的任何产品，inday() 函数返回布尔值 TRUE，并将产品标记为 ‘Defective’。对于任何返回 FALSE 值的产品，由于不是在当天制造的，它将产品标记为 ‘Faultless’。