Как получить строку даты ISO из DateTimeExpression - PullRequest
0 голосов
/ 29 января 2019

Я занимаюсь разработкой для Биксби и использую DateTimeExpression в обучении, но я пытаюсь понять, как я превращаю это в строку даты ISO для вызова внешнего API.

1 Ответ

0 голосов
/ 30 января 2019

Выражение DateTimeExp Bixby является мощным и не только фиксирует дату, но и интервалы, например, «следующий март» или «между 1 и 15 марта».Когда вы используете DateTimeExpression, Bixby проанализирует ввод и установит Date, DateTime, DateInterval или DateTimeInterval.

Чтобы проанализировать значения из DateTimeExpression, вы должны проверить, какое поле было заполнено.Хороший пример кода для этого взят из примера Землетрясения в документации.В качестве примера землетрясения вы могли бы задать вопрос типа «Найти землетрясения, которые произошли 12 марта 1963 года» или «Найти землетрясения, которые произошли в марте 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.Если пользователь указал только одну дату, конец устанавливается как конец этого дня.

...