Как я могу проанализировать строку с вычислением даты, например, сейчас + 1 день в объекте даты? - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я использую Cucumber для определения наших тестовых примеров в строковых файлах функций. Интеграционные тесты будут запускаться с заглушкой Wiremock, которая рассчитывает дату, например: "{{now offset = '+ 15 minutes'}}"

Я хочу проверить, что дата и время, которые я получаю из Заглушка wiremock отображается правильно, дата и время правильные, а таблица упорядочена правильно на основе этой даты и времени.

В настоящее время у нас есть собственная реализация, чтобы получить +/- X дней. Это использует некоторое регулярное выражение и поддерживает только дни. Я могу расширить этот код и добавить к нему минуты, но я бы предпочел использовать библиотеку или стандартизированный фрагмент кода, который может анализировать все вычисления даты. Мне не удалось его найти, и я хотел бы получить несколько предложений, как решить эту проблему.

Чтобы дать вам представление о том, с чем я работаю в данный момент:

function stringReplaceNow(string) {
  var regex = /<now:([A-Z-]+):?((\+|-)([0-9]+))?>/gi;

  return string.replace(regex, function (match, format, shouldModify, modification, modAmount) {
    if (modification === '+') {
      return moment().add(modAmount, 'days').format(format);
    } else if (modification === '-') {
      return moment().subtract(modAmount, 'days').format(format);
    }
    return moment().format(format);
  });
}

В наших тестах с огурцом он используется так: он получает текущую дату и соответственно вычитает дни:

| Name             | Datetime            | State      |
| Johnson          | <now:DD-MM-YYYY:-2> | Processing |
| Minter           | <now:DD-MM-YYYY:-3> | Processing |
| Brown            | <now:DD-MM-YYYY:-5> | Done       |

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Не существует стандартов для вычисления дат, поэтому я сомневаюсь, что вы найдете для этого библиотеку. Однако вы можете использовать части существующих стандартов, чтобы упростить свои собственные расчеты даты.

В этом случае вместо разработки собственного формата рассмотрите возможность использования формата продолжительности ISO-8601. Затем вы можете использовать существующие библиотеки для анализа формата продолжительности и добавления его к текущему времени.

Примеры:

"PT20.345S" -- parses as "20.345 seconds"
"PT15M"     -- parses as "15 minutes" (where a minute is 60 seconds)
"PT10H"     -- parses as "10 hours" (where an hour is 3600 seconds)
"P2D"       -- parses as "2 days" (where a day is 24 hours or 86400 seconds)
"P2DT3H4M"  -- parses as "2 days, 3 hours and 4 minutes"
"PT-6H3M"    -- parses as "-6 hours and +3 minutes"
"-PT6H3M"    -- parses as "-6 hours and -3 minutes"
"-PT-6H+3M"  -- parses as "+6 hours and -3 minutes"
0 голосов
/ 19 июня 2020

Попробуйте использовать День Js. Его легкий вес и больше возможностей, чем у момента js.

...