有没有办法通过指定“日期大于xxxxx”过滤器来返回OData中的一系列记录...但是使用之前从OData Feed获得的日期?
使用案例:假设我要构建一个显示最近完成的在线订单列表的网页。这就是我的目标:
我正在努力的是指定日期“大于”过滤器。出于某种原因,OData中的日期过滤器似乎与OData自己的本机日期格式不太匹配。我是否需要将最初获得的日期转换为可用于过滤的其他格式?
我想做这样的事情:
[http://mydomain/Services/v001.svc/Orders?$filter=close_dt gt 1338336000000][1]
仅供参考:我正在使用V2
答案 0 :(得分:37)
想出来了。
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'
我最终创建了一个执行格式化switcharoo的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'
}
几点说明:
答案 1 :(得分:25)
在OData V4中,日期过滤格式已更改为$filter=close_dt gt 2006-12-30T23:59:59.99Z
例如
对于以前版本的OData,请参阅以前的答案
答案 2 :(得分:3)
仅仅是一个FYI:在协议的V3中,基于非刻度的日期时间格式现在是默认格式:
... <强> “RELEASEDATE”: “1992-01-01T00:00:00”强> ...
答案 3 :(得分:2)
如果您使用日期时间逻辑,则可以执行lt或gt。
e.g。 ... mydomain / Services / v001.svc / Orders?$ filter = close_dt gt datetime'20141231'