Сравните две даты с библиотекой Jsonata - PullRequest
2 голосов
/ 07 августа 2020

Я использую библиотеку jsonata для сравнения значений, введенных с экрана, со значениями в списке оболочки. Здесь я ввожу диапазон дат из пользовательского интерфейса и сравниваю его с датой в моем списке оболочек, конвертируя обе даты в метку времени Unix эпохи с помощью метода DateTime.getTime ().

например, Мой JSON:

{
  "lstData": [
    {
      "strFieldName":"ActivityDate",
      "strValue": "2020-06-28"
      "dateTimeStamp": 1594857600000    
    },
    {
      "strFieldName":"ActivityDate",
      "strValue": "2020-07-10",
      "dateTimeStamp": 1595116800000    
    },
    {
      "strFieldName":"ActivityDate",
      "strValue": "2020-07-25",
      "dateTimeStamp": 1595289600000    
    }
  ]
}

И входные StartDate и EndDate: 2020-07-20 и 2020-07-30, где StartDate.getTime () - 1595721600000 и EndDate.getTime () - 1596240000000

Запрос Jsonata: lstData [strFieldName = "ActivityDate" и (dateTimeStamp> = 1595721600000 и dateTimeStamp <= 1596240000000)] </p>

ЗАПРОС ВЫШЕ НЕ РАБОТАЕТ. Я пробовал много других способов сравнения дат с использованием jsonata, но ничего не работает. Если я удалю приведенное выше сравнение дат, тогда запрос будет работать, т.е. lstData [strFieldName = "ActivityDate"] работает. Но в сравнении дат, которое я пытаюсь найти, есть ошибка.

Может ли кто-нибудь помочь мне с правильным синтаксисом для дат в jsonata?

Спасибо, Шрути

1 Ответ

0 голосов
/ 10 августа 2020

Насколько я понимаю, в вашем запросе нет ничего плохого, просто ни одна из этих временных меток в миллисекундах не попадает в этот диапазон. Я бы дважды проверил, как вы вычисляете значения миллисекунд, потому что похоже, что они не приравниваются к строковым значениям. Например, первый: new Date(1594857600000) оценивается до 16 июля 2020 года, когда я его пробую.

Вы можете использовать JSONata для анализа формата строки, если это поможет. Например lstData.strValue.$toMillis($, '[Y]-[M]-[D]')

...