在 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.duration
system 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中将字符串转换为数字