# 日期和时间字段

如果您在应用程序中使用包含日期或时间戳信息的字段，则可以定义多个日期相关属性（例如，年份或星期），并在可视化中使用它们。

## 在数据管理器中创建日期字段。

在启用数据分析后使用添加数据在数据管理器中构建自己的数据模型，或单击数据管理器中的加载数据时，会为识别为日期或时间戳的所有数据字段自动创建日期字段。

信息注释

在数据管理器中创建的日期字段会自动添加到 autoCalendar 中。

有关更多信息，请参阅[通过 Data Manager 加载并管理数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/managing-data.htm)。

如果未自动识别日期或时间戳字段，则可以在数据管理器表格编辑器中调整输入格式。您也可以设置可视化中要使用的显示格式。

有关更多信息，请参阅[更改字段类型](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/LoadData/changing-date-time-format.htm)。

### 哪些日期和时间字段可自动识别？

可以根据您的系统区域设置，自动识别日期和时间戳字段。此外，还可以识别以下格式：

* M/D/YYYY h:mm
* D/M/YYYY h:mm TT
* M/D/YYYY
* D/MM/YYYY
* YYYYMMDD
* YYYYMMDDhhmmss
* YYYYMMDDhhmmss.fff
* YYYYMMDDhhmmssK
* YYYY-MM-DD
* YYYY-MM-DDThh:mm:ss
* YYYY-MM-DD-Thh:mm:ss.fff
* YYYY-MM-DD-Thh:mm:ssK

日期和时间格式

| 格式说明符 | 描述 |
| --- | --- |
| YYYY | 年 |
| M, MM | 月 |
| D, DD | 日 |
| hh | 小时 |
| mm | 分钟 |
| ss | 秒 |
| fff | 毫秒 |
| TT | AM 或 PM |
| K | 时区 |
| T | 日期和时间之间的分隔线。T 不能替换为其他字符。 |

## 在数据加载脚本中创建日期和时间字段

如果使用 数据加载编辑器 来创建数据模型，则需要创建日历模板，在此模板中定义数据加载脚本中要导出的字段。在运行脚本和重新加载数据时，将会生成导出的日期和时间字段。

有关更多信息，请参阅[衍生字段](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/derived-fields.htm)。

## 在应用程序中使用日期和时间字段

### 可视化中的日期和时间字段

资源模板字段中的所有日期或时间戳都标记为 the 日期和时间 icon，您可以扩展它们来使用已生成的日期和时间字段。您可以在可视化中使用它们，就像使用任何其他数据字段一样。

### 维度中的日期和时间字段

创建维度时，也可以使用日期和时间字段。日期和时间字段显示在生成它们的字段下。

### 表达式中的日期和时间字段

例如，创建度量时，可以在所有表达式中使用日期和时间字段。日期和时间字段以

[field name].autoCalendar.[date & time field] 命名。

* [field name] 是用于生成日期和时间字段的数据字段名称。
* [date & time field] 是要使用的日期和时间字段，例如 Year。

示例：

`Date.autoCalendar.Year`

### 日历度量中的日期和时间字段

日历度量使用在 autoCalendar 中创建的日期和时间字段。其中的每个日期和时间字段都由一个集合分析表达式计算，该表达式确定数据是否位于时初至今期间内，或者确定日期是否位于相对于当前日期的指定位置内。这些日期和时间字段是相对的，它们基于当前日期返回结果。可以独立于日历度量来使用这些字段。

日历字段的日期和时间字段按如下方式设置格式：

[字段名称].autoCalendar.[日期和时间字段]={[值]}

* [field name] 是用于生成日期和时间字段的日期字段的名称。
* [date & time field] 是所使用的日期和时间字段的名称，例如，InYTD。
* [value] 是日期和时间字段的集合分析表达式的值，用于确定要包括哪些日期。

示例：

`Date.autoCalendar.YearsAgo={1}`

下面是可用的日期和时间字段及其示例值：

#### InYTD

该日期和时间字段确定日期是否位于年初至今范围内。

InYTD

| 示例 | 结果 |
| --- | --- |
| ` Date.autoCalendar.InYTD={0}<br>` | 返回位于年初至今时间范围内的所有日期。<br><br>例如，如果当前日期是本年份的第 54 天，则将在日期字段中包括每一年前 54 天中的日期。 |
| ` Date.autoCalendar.InYTD={1}<br>` | 返回位于年初至今时间范围之外的所有日期。<br><br>例如，如果当前日期是本年份的第 54 天，则将在日期字段中包括每一年第 54 天之后的所有日期。 |

#### YearsAgo

该日期和时间字段确定日期是否位于相对于当前日期的特定年份中。

YearsAgo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.YearsAgo={0}` | 返回本年份中的所有日期。 |
| `Date.autoCalendar.YearsAgo={1}` | 返回上一年中的所有日期。 |
| `Date.autoCalendar.YearsAgo={8}` | 返回八年之前的所有日期。 |

#### InQTD

该日期和时间字段确定日期是否位于相对于当前日期的季初至今范围内。

InQTD

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.InQTD={0}` | 返回所有季度中位于季初至今范围内的所有日期。<br><br>例如，如果当前日期是第 1 季度的第 14 天，则将在日期字段中包括每一季度的前 14 天。 |
| `Date.autoCalendar.InQTD={1}` | 返回所有季度中位于当前季初至今范围之外的所有日期。<br><br>例如，如果当前日期是第 1 季度的第 14 天，则将在日期字段中包括每一季度第 14 天之后的所有日期。 |

#### QuartersAgo

该日期和时间字段确定日期是否位于相对于当前日期的特定季度中。

QuartersAgoQuartersAgo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.QuartersAgo={0}` | 返回当前季度中的所有日期。 |
| `Date.autoCalendar.QuartersAgo={1}` | 返回上一季度中的所有日期。 |
| `Date.autoCalendar.QuartersAgo={8}` | 返回八个季度之前的所有日期。 |

#### QuarterRelNo

该日期和时间字段确定日期是否位于相对于当前日期的特定季度中。

QuarterRelNoQuarterRelNo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.QuarterRelNo={0}` | 返回当前季度的每个实例中的所有日期。<br><br>例如，如果当前日期位于第 4 季度，则将在日期字段中包括每个第 4 季度中的所有日期。 |
| `Date.autoCalendar.QuarterRelNo={3}` | 返回某个季度的每个实例中的所有日期，该季度比当前季度早两个季度。<br><br>例如，如果当前日期位于第 4 季度，则将在日期字段中包括每个第 1 季度中的所有日期。 |

#### InMTD

该日期和时间字段确定日期是否位于相对于当前日期的月初至今范围内。

InMTDInMTD

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.InMTD={0}` | 返回位于当前的月初至今范围内所有月份中的所有日期。<br><br>例如，如果日期是 2016 年 11 月 15 日，则将在日期字段中包括每个月前 15 天中的日期。 |
| `Date.autoCalendar.InMTD={1}` | 返回位于当前的周初至今范围之外所有周中的所有日期。<br><br>例如，如果日期是 2016 年 11 月 15 日，则将在日期字段中包括每个月前 15 天之后到月末的日期。 |

#### MonthsAgo

该日期和时间字段确定日期是否位于相对于当前日期的特定月份中。

MonthsAgoMonthsAgo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.MonthAgo={0}` | 返回当前月份中的所有日期。 |
| `Date.autoCalendar.MonthAgo={1}` | 返回上一个月中的所有日期。 |
| `Date.autoCalendar.MonthAgo={8}` | 返回八个月之前的所有日期。 |

#### MonthRelNo

该日期和时间字段确定日期是否位于相对于当前日期的特定月份中。

MonthRelNoMonthRelNo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.MonthRelNo={0}` | 返回当前月份的每个实例中的所有日期。<br><br>例如，如果当前月份为六月，则将在日期字段中包括六月的每个实例中的所有日期。 |
| `Date.autoCalendar.MonthRelNo={1}` | 返回上一周的每个实例中的所有日期。<br><br>例如，如果当前月份为六月，则将在日期字段中包括五月的每个实例中的所有日期。 |

#### InWTD

该日期和时间字段确定日期是否位于相对于当前日期的周初至今范围内。

InWTDInWTD

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.InWTD={0}` | 返回位于当前的周初至今范围内所有周中的所有日期。<br><br>例如，如果当前日期是一周中的第三天，则将在日期字段中包括每周前三天中的所有日期。 |
| `Date.autoCalendar.InWTD={1}` | 返回位于当前的周初至今范围之外所有周中的所有日期。<br><br>例如，如果当前日期是一周中的第三天，则将在日期字段中包括每周最后四天中的所有日期。 |

#### WeeksAgo

该日期和时间字段确定日期是否位于相对于当前周的特定周中。

WeeksAgoWeeksAgo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.WeeksAgo={0}` | 返回当前周中的所有日期。 |
| `Date.autoCalendar.WeeksAgo={8}` | 返回八周之前的所有日期。 |

#### WeekRelNo

该日期和时间字段确定日期是否位于相对于当前日期的特定周中。

WeekRelNoWeekRelNo

| 示例 | 结果 |
| --- | --- |
| `Date.autoCalendar.WeekRelNo={0}` | 返回当前周的每个实例中的所有日期。<br><br>例如，如果当前周是本年份的第二周，则将在日期字段中包括每一年第二周中的日期。 |
| `Date.autoCalendar.WeekRelNo={1}` | 返回上一周的每个实例中的所有日期。<br><br>例如，如果当前周是本年份的第二周，则将在日期字段中包括每一年第一周中的日期。 |

## 了解详情

* [创建日历度量](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Measures/create-calendar-measure.htm)