Преобразовать системный объект продолжительности Dialogfow из минут в секунды в JavaScript - PullRequest
0 голосов
/ 29 апреля 2020

Я ищу способы преобразования системного объекта Duration (@ sys.duration) из Dialogflow в код JavaScript из минут в секунды.

Я спрашиваю пользователя об определенной продолжительности, где пользователь может ответить, например:

  • 20 минут
  • 5 минут

et c.

, что вход сохраняется в переменная the_duration. Теперь, чтобы сделать определенные вычисления, мне нужно преобразовать это в секунды. Как я могу добиться этого?

РЕДАКТИРОВАТЬ: Возможно, это поможет, если мне нужно извлечь число из строки? Я пытался искать этот способ, но приведенные примеры не подходят для этого конкретного случая c с минутами.

1 Ответ

0 голосов
/ 01 мая 2020

Системный объект @sys.duration отправит вам Объект с двумя атрибутами: «сумма», которая содержит целое число, и «единица измерения», которая содержит строку.

Итак, в Javascript, это будет выглядеть примерно так:

{
  "amount": 20,
  "unit": "min"
}

Чтобы преобразовать это в секунды, вы должны посмотреть, сколько секунд в предоставленной «единице», и умножить ее на сумму.

Хороший способ сделать этот поиск - создать объект, в качестве атрибутов которого указаны возможные имена юнитов и значения в секундах. Это работает хорошо для большинства устройств до недели. Однако, когда вы набираете месяц или год (или дольше), вы сталкиваетесь с проблемами, поскольку количество секунд для этих периодов может быть переменным. Чтобы представить их, я отмечу их как отрицательное число, чтобы вы могли проверить, не удалось ли преобразование. (Я игнорирую проблемы с изменениями часов, например, из-за перехода на летнее и летнее время.)

Я не полностью протестировал этот код, но, похоже, он правильный. Эта функция позволяет передавать объект, отправленный в параметре the_duration, и возвращает количество секунд:

function durationToSeconds( duration ){
  const mult = {
    "s":      1,
    "min":    60,
    "h":      60*60,
    "day":    60*60*24,
    "wk":     60*60*24*7,
    "mo":     -1,
    "yr":     -1,
    "decade": -1
  };
  return duration.amount * mult[duration.unit];
}

Извлечение числа из строки, безусловно, возможно, и вы можете настроить эту функцию так, чтобы Кстати, поскольку Dialogflow уже предоставляет его вам как объект с нормализованными строками, это будет значительно сложнее.

...