用JavaScript将Dialogfow持续时间系统实体从分转换为秒。

问题描述 投票:0回答:1

我正在寻找将Dialogflow中的Duration(@sys.duration)系统实体在JavaScript代码中从分钟转换为秒的方法。

我要求用户提供一定的持续时间,在这里用户可以回答,例如。

  • 20分钟
  • 5分钟

等,该输入被保存到一个变量the_duration中。

这些输入被保存到一个变量the_duration中。现在为了进行某些计算,我需要将其转换为秒。我如何才能实现这一点?

EDIT:如果我需要从字符串中提取数字,也许会有帮助?我曾试着寻找这种方法,但提供的例子并不真正适用于这种特定情况下的分钟。

javascript dialogflow dialogflow-fulfillment seconds minute
1个回答
0
投票

@sys.duration 系统实体 会给你发送一个包含两个属性的对象,"金额 "包含一个整数,"单位 "包含一个字符串。

因此,在Javascript中,这将被表示为类似的东西。

{
  "amount": 20,
  "unit": "min"
}

要想把它转换为秒,你就得查出 "单位 "里有多少秒,然后乘以金额。

一个很好的方法是创建一个对象,这个对象的属性是可能的单位名称,值是秒数。这对大多数单位到一周都很有效。然而,当你遇到一个月或一年(或更长时间)时,你就会遇到麻烦,因为这些时期的秒数可能是可变的。 为了表示这些,我会将这些标记为负数,所以你可以检查是否转换失败。(我忽略了时钟变化的问题,比如由于夏令时夏时的问题)。

我还没有完全测试这段代码,但它似乎是正确的。这个函数可以让你把发送过来的对象在 the_duration 参数,并将返回秒数。

function durationToSeconds( duration ){
  const mult = {
    "s":      1,
    "min":    60,
    "h":      60*60,
    "day":    60*60*24,
    "wk":     60*60*24*7,
    "mo":     -1,
    "yr":     -1,
    "decade": -1
  };
  return duration.amount * mult[duration.unit];
}

从字符串中提取数字当然是可能的,你也可以将这个函数改编成这种方式,但是由于Dialogflow已经将它作为一个规范化字符串的对象给你了,这将会大大增加难度。

© www.soinside.com 2019 - 2024. All rights reserved.