Datetime 如何在IBM Watson Assistant中计算2个日期时间的持续时间

Datetime 如何在IBM Watson Assistant中计算2个日期时间的持续时间,datetime,ibm-cloud,ibm-watson,watson-assistant,Datetime,Ibm Cloud,Ibm Watson,Watson Assistant,无法从IBM Watson Assistant中的另一个datetime中减去一个datetime,以查找两个datetime之间的持续时间 我在Watson Assistant的对话框中定义了2个上下文变量来保存日期: variable = $base_date value = "2019-07-01 03:00:00" variable = $current_date value = "<? now() ?>" 答复: Base date = <? $base_dat

无法从IBM Watson Assistant中的另一个datetime中减去一个datetime,以查找两个datetime之间的持续时间

我在Watson Assistant的对话框中定义了2个上下文变量来保存日期:

variable = $base_date  value = "2019-07-01 03:00:00"
variable = $current_date  value = "<? now() ?>"
答复:

Base date = <? $base_date ?>
Current date = <? $current_date ?>
然而,这不起作用

Duration = <? $base_date - $current_date ?>
这是我收到的错误,显然告诉我不能减去2个字符串。我就是想不出如何转换成我可以操纵的日期、时间或数字

对话框节点错误

使用对话框节点id[Welcome]的输出更新输出时出错。 节点输出为[{text:{values:[基本日期=\n当前日期=…持续时间=],选择策略:顺序}}]SpEL求值 错误:表达式[$base\u date-$current\u date]已转换为[ 位置0处的上下文['base_date']-上下文['current_date']]: EL1030E:的对象之间不支持运算符“减法” 键入“String”和“String”

我会建议你的方法,包括计算。表达式语言有几种方法来添加或减去值。还有一些示例说明如何重新格式化日期/时间值,以作为进一步计算的输入

关于的部分可能是您正在搜索的内容。您可以对java.util.Date.使用操作


对于复杂的转换或计算,您可能希望将其委托给云函数操作。参见本节。

data\u henrik建议将此逻辑委托给云功能操作或Watson Assistant之外的逻辑层,这是一个合理的建议。你必须在Watson Assistant中非常努力才能做到这一点,但这是可以做到的

通过整数和子字符串,可以得到各个日期部分

  "context": {
    "base_year": "<? T(Integer).parseInt($base_date.substring(0,4)) ?>",
  }
然后,您可以用以下文本进行回复:

Duration in days = <? ($base_time - $current_time)/(1000*60*60*24) ?>

谢谢,@data\u henrik。我已经看过了,但我想我缺少的是如何将2019-07-01 12:34:56转换成一个我可以转换成毫秒的时间,这样我就可以计算它了。似乎关于时间跨度和其他方面的材料允许我从锚定日期开始增加/减少一些时间单位,但不计算时间跨度本身的持续时间。我添加了更多细节。
  "context": {
    "base_year": "<? T(Integer).parseInt($base_date.substring(0,4)) ?>",
  }
  "context": {
    "base_year": "<? T(Integer).parseInt($base_date.substring(0,4)) ?>",
    "base_time": "<? new Date(
        T(Integer).parseInt($base_date.substring(0,4)),
        T(Integer).parseInt($base_date.substring(5,7)),
        T(Integer).parseInt($base_date.substring(8,10)),
        T(Integer).parseInt($base_date.substring(11,13)),
        0,0).getTime() ?>",
    "current_time": "<? new Date(2019,05,24,22,14,12).getTime() ?>"
  }
Duration in days = <? ($base_time - $current_time)/(1000*60*60*24) ?>