如何从 DateTimeExpression 获取 ISO 日期字符串

How do I get an ISO date string from DateTimeExpression

我为 Bixby 开发并在训练中使用 DateTimeExpression,但我正在努力解决如何将其转换为 ISO 日期字符串以调用外部 API.

Bixby 的 DateTimeExpression 功能强大,不仅可以捕获日期,还可以捕获时间间隔,例如"next March" 或 "between March 1st and 15th"。当您使用 DateTimeExpression 时,Bixby 将解析输入并设置 Date、DateTime、DateInterval 或 DateTimeInterval。

要解析 DateTimeExpression 中的值,您应该检查填充了哪个字段。很好的示例代码来自文档中的地震示例。对于地震示例,您会问 "Find earthquakes that occurred on March 12, 1963" 或 "Find earthquakes that occurred in March, 1963" 这样的问题。这是示例代码(来自文档)

module.exports = function findEarthquakes(
  where, dateTimeExpression, minMagnitude, classification
) {
  var whenStart;
  var whenEnd;

  if (dateTimeExpression.date) {
    whenStart = dates.ZonedDateTime.fromDate(dateTimeExpression.date);
    whenEnd = whenStart.withHour(23).withMinute(59).withSecond(59);
  }
  else if (dateTimeExpression.dateInterval) {
    whenStart = dates.ZonedDateTime.of(
      dateTimeExpression.dateInterval.start.year,
      dateTimeExpression.dateInterval.start.month,
      dateTimeExpression.dateInterval.start.day);
    whenEnd = dates.ZonedDateTime.of(
      dateTimeExpression.dateInterval.end.year,
      dateTimeExpression.dateInterval.end.month,
      dateTimeExpression.dateInterval.end.day,
      23, 59, 59);
  }
  else if (dateTimeExpression.dateTimeInterval) {
    whenStart = dates.ZonedDateTime.of(
      dateTimeExpression.dateTimeInterval.start.year,
      dateTimeExpression.dateTimeInterval.start.month,
      dateTimeExpression.dateTimeInterval.start.day,
      dateTimeExpression.dateTimeInterval.start.hour,
      dateTimeExpression.dateTimeInterval.start.minute,
      dateTimeExpression.dateTimeInterval.start.second);
    whenEnd = dates.ZonedDateTime.of(
      dateTimeExpression.dateTimeInterval.end.year,
      dateTimeExpression.dateTimeInterval.end.month,
      dateTimeExpression.dateTimeInterval.end.day,
      dateTimeExpression.dateTimeInterval.end.hour,
      dateTimeExpression.dateTimeInterval.end.minute,
      dateTimeExpression.dateTimeInterval.end.second);
  }

  var start = whenStart.toIsoString();
  var end = whenEnd.toIsoString();

  // code continues...
}

在上面的示例中,开始和结束是 ISO 日期字符串。如果用户只指定了一个日期,end 被设置为那天的结束。