在Dialogflow的内联编辑器中基于当前日期计算将来的日期

时间:2018-08-03 13:11:07

标签: javascript dialogflow

我正在使用Dialogflow的内联编辑器来处理用户数据并在in.js中查询我的数据库,与此同时,我还希望聊天机器人回答诸如以下的问题:

“我的下一次艺术测验什么时候开始。”

作为管理员,我知道艺术测试是一年中的每周三,每三周一次,但是我该如何将其转换为聊天机器人的响应,例如;

“您的下一次考试是8月8日星期三”,甚至是“您的下一次考试是今天!”

我看过this,这是启动js时间的不同方法,但似乎都不符合我的要求。

我为以下时间创建了一个函数,在该函数中,我假设必须进行计算:

  function getDate(agent){
      var today = new Date();
  }

响应将类似于:

function getTestDate(agent){
        agent.add('Your next test date is' + today); #etc   
}

最近,我在stack上看到了另一篇文章,它计算两个日期之间的天数,尽管这行得通,但我不太确定如何将其实现到Dialogflow环境中。

我不认为moment.js可以在内联编辑器中工作,但如果这样做,按照示例here,这看起来很容易:

moment([2007, 0, 29]).fromNow();     // 4 years ago
moment([2007, 0, 29]).fromNow(true); // 4 years

然后我可以简单地在每个函数中针对不同的日期执行fromNow()命令,并知道如何将此类内容解释为普通的js?

更新

此事尚无定论,但又有了另一个主意,是否有办法确定月份并从那里触发响应?例如,我可以立即创建一个标识日期的函数,然后就可以将3/4个测试日期写为文本响应:

function (getTestDate(agent){
        if(date) == May
} agent.add('Tests for May are....etc')

1 个答案:

答案 0 :(得分:0)

好吧,不完全是我想要的,但是我能得到的最接近的是声明一个测试日期,然后创建if语句来建议今天是否在某个日期之前,那么我知道用下一个最接近的日期进行响应,依此类推。

function getTestDate(agent){
        var today = new Date();
        var testDate= new Date("08/08/2018");
        var timeDiff = Math.abs(testDate.getTime() - today.getTime());
        var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));

        if (today < testDate){
            agent.add('Your next test date is in ' + diffDays + 'days, at 9pm on Wednesday');
        }else if (today > testDate) {
            agent.add('Your test date was on Wednesday 8th August 2018');
        }else if (today == testDate){
            agent.add('Your test is today, Wednesday 8th August 2018');
        }

同样,这不是理想的,因为我知道必须在不同的时间创建各种功能,但是要把工作做好。 如果您还有其他建议,请随时提出建议。