我正在寻找将Dialogflow中的Duration(@sys.duration)系统实体在JavaScript代码中从分钟转换为秒的方法。
我要求用户提供一定的持续时间,在这里用户可以回答,例如。
等,该输入被保存到一个变量the_duration中。
这些输入被保存到一个变量the_duration中。现在为了进行某些计算,我需要将其转换为秒。我如何才能实现这一点?
EDIT:如果我需要从字符串中提取数字,也许会有帮助?我曾试着寻找这种方法,但提供的例子并不真正适用于这种特定情况下的分钟。
该 @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已经将它作为一个规范化字符串的对象给你了,这将会大大增加难度。