在 JavaScript 中将 Dialogfow 持续时间系统实体从分钟转换为秒

Posted

技术标签:

【中文标题】在 JavaScript 中将 Dialogfow 持续时间系统实体从分钟转换为秒【英文标题】:Convert Dialogfow duration system entity from minutes to seconds in JavaScript 【发布时间】:2020-04-29 14:35:33 【问题描述】:

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

我询问用户一段时间,用户可以在哪里回答,例如:

20 分钟 5 分钟

等等

该输入被保存到变量 the_duration 中。现在要进行某些计算,我需要将其转换为秒。我怎样才能做到这一点?

编辑:如果我需要从字符串中提取数字可能会有所帮助?我尝试过寻找这种方式,但提供的示例在几分钟内并不真正适用于这种特定情况。

【问题讨论】:

【参考方案1】:

@sys.durationsystem entity 将向您发送一个具有两个属性的 Object,“amount”包含一个整数,“unit”包含一个字符串。

所以在 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 已经将它作为具有规范化字符串的对象提供给您,因此要困难得多。

【讨论】:

啊,这是一个很好的选择。但是,准确地说,我正在使用 Voiceflow,而不是 Dialogflow。在语音流中,我没有收到您所说的任何回复(我相信只有在直接在 Dialogflow 中工作时才有效) 请更新您的问题以反映您正在使用的内容。显示您尝试过的内容、日志、参数值以及您正在做的其他示例可以帮助我们帮助您,而不必猜测您的意思。见How do I ask a good question?

以上是关于在 JavaScript 中将 Dialogfow 持续时间系统实体从分钟转换为秒的主要内容,如果未能解决你的问题,请参考以下文章

javascript 在JavaScript中将州名转换为缩写

JavaScript 在Javascript中将字符串转换为数字

在 JavaScript 中将字符串解析为日期

javascript 如何在Javascript中将字符串转换为数字?

如何在 JavaScript 中将公历日期更改为波斯日期?

如何在 ios 中将变量从 javascript 传递到目标 C 和目标 C 到 Javascript