XLSForm 可以包含日期、时间或日期时间问题。 可以使用外观设置这些问题的样式,以帮助进行数据捕获。
您可以在日期、时间或日期时间问题的计算列中使用 format-date 函数设置日期和时间格式。 有关详细信息,请参阅设置日期的格式。
默认情况下,Survey123 分配的日期和时间问题的 ArcGIS 字段类型可以更改为仅捕获日期、仅时间或时间戳偏移。 有关详细信息,请参阅 Esri 自定义列。
警告:
Survey123 Connect 3.19 11 月版本及更早版本无法分配仅日期、仅时间或时间戳偏移字段类型。 尽管 Survey123 Connect 3.19 2 月更新的版本可以将这些数据类型发布到 ArcGIS Enterprise 11.2,但是它们得不到完全支持,其在 ArcGIS Enterprise 11.2 Web 图层中的使用被视为测试功能。
开始和结束问题可自动捕获调查的开始和结束日期和时间,并且可用于计算完成调查花费的时间。
新纪元时间和十进制时间
Survey123 中提供两种方法表示时间:新纪元时间和十进制时间。 Survey123 外业应用程序支持新纪元时间和十进制时间,而 web 应用程序仅支持十进制时间。 要确保调查能够在外业应用程序和 Web 应用程序中运行一致,您必须在日期和时间计算中使用十进制时间。
新纪元时间和十进制时间是表示时间的不同方式。 新纪元时间(也称为 UNIX 时间)的定义为自协调世界时间 (UTC) 1970 年 1 月 1 日 00:00:00 以来所经过的秒数。 ArcGIS 将以毫秒为单位存储时间 (UTC),因此 Survey123 外业应用程序支持以毫秒为单位的新纪元时间。 十进制时间的定义为自同一时间点以来所经过的天数。
便于阅读的时间 | 新纪元时间 | 十进制时间 |
---|---|---|
2015 年 8 月 31 日星期一 09:00:00 | 1441011600000 | 16678.375 |
这一点非常重要,因为 Survey123 外业应用程序支持新纪元时间和十进制时间,而 Survey123 Web 应用程序仅支持十进制时间。 如果调查需要使用 Web(无论是调查本身或者调查及外业应用程序),则必须使用十进制时间来计算某些日期。 特别是,需要计算持续时间,例如,计算天数或秒数,或者涉及时间日期加减法的计算。
对于这些计算类型,需针对十进制日期格式的值执行计算,并在执行计算后将结果转换为日期值。 示例等式将转换 now() 函数返回的十进制日期,向其添加 14 天,然后将结果转换回日期。
date(decimal-date-time(now()) + 14)
然后,您可以使用此函数返回的日期来更新调查中的日期或将其作为调查的一部分提交。
对某一日期值进行加减法时,也必须使用十进制天。 请参考下表,以了解如何将十进制时间等同于便于阅读的时间和新纪元时间。
便于阅读的时间 | 新纪元时间 | 十进制时间 |
---|---|---|
1 秒 | 1000 | 0.00001157407407 (1 / 24 / 60 / 60) |
1 分钟 | 60,000 (1000 * 60) | 0.00069444444444 (1 / 24 / 60) |
1 小时 | 3600000 (1000 * 60 * 60) | 0.04166666666667 (1 / 24) |
1 天 | 86400000 (1000 * 60 * 60 * 24) | 1 |
1 周 | 604800000 (1000 * 60 * 60 * 24 * 7) | 7 |
1 个月 | 2630880000 (1000 * 60 * 60 * 24 * 30.45) | 30.45 |
1 年 | 31557600000 (1000 * 60 * 60 * 24 * 365.25) | 365.25 |
将新纪元时间计算更改为十进制时间计算
如果使用基于新纪元的时间计算创建了现有调查,则必须将其转换为十进制时间,才能在 Survey123 Web 应用程序中正常运行。 以下提供了一些从新纪元时间转换为十进制时间的表达式示例:
目标 | 新纪元时间计算 | 十进制时间计算 |
---|---|---|
未来 15 分钟 | now() + 15 * 60 * 1000 | date-time(decimal-date-time(now()) + 0.0104166675) |
未来两周 | now() + 14 * 24 * 60 * 60 * 1000 | date(decimal-date-time(now()) + 14) |
午餐时间,以分钟为单位 | int(${LunchEnd} - ${LunchStart}) div (1000 * 60) | int((decimal-date-time(${lunchends}) - decimal-date-time(${lunchstarts})) * 24 * 60) |
从出生日期计算年龄(以年为单位) | int((today() - ${birth_date}) div (1000 * 24 * 60 * 60 * 365.25)) | int((decimal-date-time(today()) - decimal-date-time(${birth_date})) div 365.25) |
了解需要对调查进行的更改后,更新过程如下所示:
- 在 Survey123 Connect 中,更新所有基于新纪元的时间计算以使用十进制日期计算。 建议在继续操作之前先保存一份 XLSForm 的副本。
- 在 Survey123 Connect 预览中测试更新后的计算,以确保计算按预期运行。
- 重新发布调查。 更新计算不会触发重新发布要素图层,因此该操作不会造成现有数据丢失。
- 允许外业用户在 Survey123 外业应用程序中更新调查。