如何使用 dojox.jsonPath.query 过滤/查询日期

Posted

技术标签:

【中文标题】如何使用 dojox.jsonPath.query 过滤/查询日期【英文标题】:how to filter / query date using dojox.jsonPath.query 【发布时间】:2010-12-23 18:56:39 【问题描述】:

我指的是使用http://www.sitepen.com/blog/2008/03/17/jsonpath-support/

这就是我正在做的(花了两天但没有运气): 首先绘制一个带有整数列和日期列的数据网格,并且还可以通过单击列标题对列值进行排序..

现在使用 dojox.jsonPath.query 使用类似

的语法查询数字
  jsonStore = new dojox.jsonPath.query(object,"[?(@.+ field1 > 500)]");//works fine

(使用 jsonStore 重绘网格).. 到目前为止一切正常。

但现在尝试使用 jsonPath 为 dojo 数据网格过滤另一列上的日期。

var dt = new Date();
jsonStore = new dojox.jsonPath.query(object,"[?(@.effectiveDate<" + dt + ")]");// does not work
// I am trying to get the rows of the grid which have effectiveDate date less 
// than cuurent date or any other passed 'javascript date object'

layout = ["field":"field1","name":"field1","type":dojox.grid.cells.DateTextBox,"field":"effectiveDate","name":"effectiveDate","formatter":formatDate];

其中 EffectiveDate 是 dojo 数据网格布局的字段。但以上不起作用并引发以下错误 “jsonPath:缺失;之前的声明:_v.effectiveDate

我应该如何使用jsonPath来查询日期,或者我的语法是错误的?

有没有一种方法可以使用 dojox.jsonPath.query 或 dojox.json.query 使用 =、= 运算符来查询 json 对象中的日期对象....??

有什么帮助吗?

【问题讨论】:

【参考方案1】:

日期在 JSON 中存在问题。因为 JSON 中不支持原生 Date 类型,所以 Dates 必须使用数字或字符串表示。您如何表示您要比较的 JSON 中的 Date 对象?如果您在数据和查询中使用一致的表示,并且选择了一种可比较的方法,那么这应该可行。出于多种原因,“ISO”时间戳是最好的(参见 dojo.date.stamp),并且最常用于 JSON。应避免 Date.toString (您通过与上面的“+”连接而隐式使用的内容),不可排序,甚至在浏览器之间也不一致。

【讨论】:

感谢您在 json 对象中的回复我将值作为日期对象 "items":["effectiveDate":new Date(2009,11,12)] //new Date(12/ 12/2009) 没有双引号,以便网格获取日期对象,然后数据网格将日期显示为 --> Sat Dec 12 2009 00:00:00 GMT-0600 (Central Standard Time) 所以我猜它满足一致性你是在说我写下面几行的时候……对吧?? var dt = 新日期(); jsonStore = new dojox.jsonPath.query(object,"[?(@.effectiveDate 你描述的是一个JS对象,而不是一个JSON字符串。 JSON 不允许 Date 对象作为值。 JSON stringify 例程可以使用诸如 ISO 之类的方案转换日期,或者默认情况下可能只使用 toString,但我认为您所描述的只是将 JS 对象传递给 Dojo Grid,没有 JSON。您确实希望避免 Date.toString 出于上述原因以及更多(它既不是一致的、可排序的也不是本地化的)dojox.grid 允许您使用格式化程序将此信息呈现给用户。你应该检查一下。此外,您可能应该使用 ISO 作为有效日期

以上是关于如何使用 dojox.jsonPath.query 过滤/查询日期的主要内容,如果未能解决你的问题,请参考以下文章

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?