操作方法

操作方法:在 ArcGIS Online 中使用 Arcade 计算两个文本字段之间的日期差值

Last Published: January 30, 2024

描述

在 ArcGIS Online 中,当计算两个字段之间的日期差值时,DateDiff() 函数可能无法正常运行,尤其当日期字段采用不同格式且存储为文本或字符串时更是如此。 可以使用 Arcade 表达式计算两个文本字段之间的日期差值。 此方法可将定性时间信息变换为定量指标,由此能够采用更明智和更具战略性的方法来管理和解释时效性数据。

Note:
The date difference between two text fields can only be calculated if the date format used in the text fields is in dd-mmmm-yyyy.

本文提供了在 ArcGIS Online 中使用 Arcade 表达式计算属性表中两个文本字段之间日期差值的工作流。

解决方案或解决方法

  1. 在 ArcGIS Online 中,单击所需托管要素图层。 在项目详细信息页面上,单击数据选项卡。
Note:
Skip to Step 3 if the script is run on an existing field.
  1. 视图中,创建一个新字段。 有关说明,请参阅 ArcGIS Online:添加字段。 确保从类型下拉列表中选择字符串双精度。 在本示例中,将创建一个名为 Date_Difference 的字段。
  2. 单击字段标头,然后选择计算。 在本示例中,将选择 Date_Difference。
  3. 计算字段对话框中,单击 Arcade
  4. Arcade 计算器对话框中,按如下方式指定表达式字段,以计算两个文本字段之间的日期差值(以天为单位):
var months = {
    "January": "01",    
    "February": "02",
    "March": "03",
    "April": "04",
    "May": "05",
    "June": "06", 
    "July": "07",
    "August": "08",
    "September": "09",
    "October": "10",
    "November": "11",
    "December": "12"
};
  1. 此变量用于定义月份的细分。
var <variable1> = $feature.<field_name1>;
var <variable2> = $feature.<field_name2>;
  1. 将 <variable1> 和 <variable2> 替换为表示字段名称的变量。 在本示例中,将使用 startDate 和 endDate。
  2. 将 <field_name1> 和 <field_name2> 替换为包含字段值的字段的名称。 在本示例中,将使用 StartDate 和 EndDate。
var <variable3> = Split(<variable1>, " ");
var <variable4> = Split(<variable2>, " ");
  1. 将 <variable3> 和 <variable4> 替换为变量,以表示使用 Split 函数将 <variable1> 和 <variable2> 分割为部分数组。 在本示例中,将使用 dateParts 和 dateParts2。
var dayNum = dateParts[0];
var monthNum = months[dateParts[1]];
var yearNum = dateParts[2];

var dayNum2 = dateParts2[0]; var monthNum2 = months[dateParts2[1]]; var yearNum2 = dateParts2[2];
  1. 这些变量将存储分割后的日期的日、月和年分量。
var <variable5>  = yearNum + "-" + monthNum + "-" + dayNum;
var <variable6> = yearNum2 + "-" + monthNum2 + "-" + dayNum2;

var dateDifference = DateDiff(<variable6>, <variable5>, "days");
return dateDifference;
  1. 将 <variable5> 和 <variable6> 替换为所需变量。 在本示例中,将使用 updatedStartDate 和 updatedStartDate。

以下是 Arcade 表达式的完整工作代码。

var months = {
  "January": "01", "February": "02", "March": "03", "April": "04", "May": "05", "June": "06", "July": "07", "August": "08", "September": "09", "October": "10", "November": "11", "December": "12"
}; var startDate = $feature.StartDate; var endDate = $feature.EndDate; var dateParts = Split(startDate, " "); var dateParts2 = Split(endDate, " "); var dayNum = dateParts[0]; var monthNum = months[dateParts[1]]; var yearNum = dateParts[2]; var dayNum2 = dateParts2[0]; var monthNum2 = months[dateParts2[1]]; var yearNum2 = dateParts2[2]; var updatedStartDate = yearNum + "-" + monthNum + "-" + dayNum; var updatedEndDate = yearNum2 + "-" + monthNum2 + "-" + dayNum2; var dateDifference = DateDiff(updatedEndDate, updatedStartDate, "days"); return dateDifference;
  1. 单击测试以验证表达式,然后单击确定以应用查询。
Arcade expression specified in the Arcade Calculator dialog box.png
Note:
To calculate the difference between the two date fields in other units such as hours, minutes, or seconds, use the same expression and replace 'days' with the desired unit of measurement.

下图显示了在新字段中计算并填充的两个文本字段之间的日期差值(以天为单位)。

Attribute table displaying the date difference between two text fields.png

文章 ID: 000031779

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项