gpt4 book ai didi

OData:日期 "Greater Than"过滤器

转载 作者:行者123 更新时间:2023-12-03 07:37:40 29 4
gpt4 key购买 nike

有没有办法通过指定“日期大于 xxxxx”过滤器来返回 OData 中的一系列记录...但使用之前从 OData 源获取的日期?

用例:假设我想要构建一个网页来显示最近完成的在线订单的列表。这就是我的目标:

  1. 加载页面
  2. 异步访问我的 OData 服务,返回最后 100 个订单(按日期降序排列,以便最先显示最近完成的订单)
  3. 使用 OData 数据在页面上构建 HTML
  4. 将最大日期存储到全局变量中(如下所示:/Date(1338336000000)/)
  5. 以 30 秒的间隔调用 OData 服务,但这次指定一个过滤器,仅返回订单日期大于前一个 MAX Date 的记录。在本例中:/Date(1338336000000)/
  6. 如果返回任何记录,请为这些记录构建 HTML 并将这些项目添加到之前加载的项目之前。

我遇到的困难是指定日期“大于”过滤器。由于某种原因,OData 中的日期过滤器似乎与 OData 自己的 native 日期格式配合得不太好。我是否需要将最初获得的日期转换为可用于过滤的不同格式?

我想做这样的事情:

http://mydomain/Services/v001.svc/Orders?$filter=close_dt%20gt%201338336000000

仅供引用:我正在使用 V2

最佳答案

想通了。

OData V2 开箱即用,以 JSON 日期格式从 SQL 返回日期,如下所示:

/Date(1338282808000)/

但是,为了在 OData 调用中使用日期作为过滤器,您的日期必须采用 EDM 格式,如下所示:

2012-05-29T09:13:28

因此,我需要从初始 OData 调用中获取日期,然后将其转换为 EDM 格式,以便在后续 OData 调用中使用,如下所示:

/Services/v001.svc/Orders?$filter=close_dt gt DateTime'2012-05-29T09:13:28' 

我最终创建了一个 javascript 函数来执行格式切换:

function convertJSONDate(jsonDate, returnFormat) {
var myDate = new Date(jsonDate.match(/\d+/)[0] * 1);
myDate.add(4).hours(); //using {date.format.js} to add time to compensate for timezone offset
return myDate.format(returnFormat); //using {date.format.js} plugin to format :: EDM FORMAT='yyyy-MM-ddTHH:mm:ss'
}

一些注意事项:

  • JSON 格式似乎没有针对时区进行调整,因此返回的日期与我在数据库中看到的日期不匹配。所以我不得不手动添加时间来补偿(请有人解释一下)。
  • 我正在使用date.format.js您可以下载的插件 here用于格式化日期和添加时间。

关于OData:日期 "Greater Than"过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387673/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com