2

我正在使用 jsonata 库来比较从屏幕输入的值与包装器列表中的值。在这里,我从 UI 输入一个日期范围,并通过使用 DateTime.getTime() 方法将两个日期转换为 Unix Epoch 时间戳将其与我的包装器列表中的日期进行比较。

例如我的 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" and (dateTimeStamp >= 1595721600000 and dateTimeStamp <= 1596240000000)]

上述查询不起作用。我尝试了许多其他方法来使用 jsonata 进行日期比较,但没有任何效果。如果我删除上面的日期比较,则查询有效,即 lstData[strFieldName = "ActivityDate"] 有效。但是我试图找到的日期比较中有一些错误。

有人可以帮助我使用正确的 jsonata 日期语法吗?

谢谢, 施鲁蒂

4

1 回答 1

0

据我所知,您的查询没有任何问题,只是那些以毫秒为单位的时间戳都没有落在该范围内。我会仔细检查您如何计算毫秒值,因为看起来它们不等于字符串值。例如第一个: new Date(1594857600000)当我尝试时评估为 2020 年 7 月 16 日。

如果有帮助,您可以使用 JSONata 来解析字符串格式。例如 lstData.strValue.$toMillis($, '[Y]-[M]-[D]')

于 2020-08-10T09:01:40.427 回答