如何在JavaScript中将Dialogflow的@sys.duration实体从分钟转秒?
解决Dialogflow @sys.duration 分钟转秒的问题
嘿,我之前也碰过这个需求,其实不用费劲去从字符串里抠数字——Dialogflow的@sys.duration实体返回的是一个结构化的JSON对象,里面已经帮你解析好了各个时间单位的数值,直接用就完事儿了!
核心处理方案
当用户回复类似“20 minutes”“5 minutes”这类内容时,你的the_duration变量其实是一个包含时间单位键值对的对象,结构大概是这样的:
// 用户说"20 minutes"时,the_duration的结构 { minutes: 20, seconds: 0, hours: 0, days: 0, // 其他可能的时间单位... }
所以要转成秒非常简单,直接取minutes属性乘以60就行:
// 仅处理分钟转秒 const durationInSeconds = the_duration.minutes * 60;
考虑更复杂的输入场景
如果用户可能输入混合单位(比如“1 minute 30 seconds”),那可以把分钟转秒后加上已有的秒数,同时用|| 0兜底避免属性为undefined报错:
// 处理混合单位的情况 const totalSeconds = (the_duration.minutes || 0) * 60 + (the_duration.seconds || 0);
特殊情况:如果拿到的是原始字符串(不推荐)
万一你因为某些原因拿到的是未解析的原始输入文本,那可以用正则提取数字后转换:
// 从字符串中提取数字部分 const numberMatch = the_duration.match(/\d+/); // 转换为数字,没匹配到就设为0 const minutes = numberMatch ? parseInt(numberMatch[0], 10) : 0; const durationInSeconds = minutes * 60;
不过还是优先用Dialogflow解析好的结构化对象更靠谱——毕竟正则容易翻车(比如用户输入“twenty minutes”就抓不到数字,但@sys.duration能正确识别成20分钟)。
内容的提问来源于stack exchange,提问作者Velionis
相关产品推荐
相关产品推荐

