Alexa slot AMAZON.DATE 处理没有年份的日期

Alexa slot AMAZON.DATE handle dates without years

我正在构建 Alexa 技能并使用 AMAZON.DATE 插槽类型来获取日期。

我的问题是,当用户说出没有年份的日期时,Alexa 会处理它并 returns 带有未来日期的日期字符串。

示例 - 今天是 2017-09-20,用户向 Alexa 询问日期 'Sixth June',Alexa returns 2018-06-06.

我想使用最近的过去日期而不是最近的未来日期,以防用户未在话语中指定年份。如果用户指定年份,我不想更改日期年份。

我无法使用 Python 在 AWS Lambda 上处理此问题,因为 Alexa 会在 JSON 正文中发送完整的日期字符串,无论用户是否提供年份。

我不知道是否可以使用 Alexa 处理此类用户输入。关于 AMAZON.DATE 插槽或其他处理此类用户话语的方法,我可以做些什么吗?

你不能用内置的日期槽来做到这一点,

映射到特定日期(例如“今天”或“11 月 25 日”)的话语转换为完整日期:2015 年 11 月 25 日。 请注意,这默认为当前日期或之后的日期。

来源:- https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/built-in-intent-ref/slot-type-reference#date

您可以尝试的一种逻辑是执行自定义逻辑。获取用户输入的今天日期和明年同一日期之间的差异。如果这些月份之间的差异大于 6 个月,那么最近的日期将是未来的日期。如果差异小于 6 个月,则过期。假设用户在 7 月 25 日(2017 年)输入,今天的日期是 2017 年 8 月 25 日。现在您可以将 7 月 25 日加 1 年,然后您将得到 2018 年 7 月 25 日。2018 年 7 月 25 日和 2017 年 8 月 25 日之间的差异大于 6 个月所以你想要的日期是过去的日期,即 2017 年 7 月 25 日,反之亦然。为了更准确,您可以以天而不是月来计算

将 Alexa 的插槽输入日期字符串转换为 js 日期对象后,(可能使用 amazon-date-parser)以下可以工作

if (dateobj > new Date()) {
      var currentMonth = new Date().getMonth()
      var dateMonth = dateobj.getMonth()
      var offset = dateMonth > currentMonth ? 1 : 0 //  if current month is to be set with past year use >=
      dateobj.setFullYear(new Date().getFullYear() - offset);
 }