指定$ http GET请求到Parse DB的日期范围参数

时间:2015-06-02 15:30:02

标签: angularjs rest parse-platform angularjs-service

以下是我向Parse.com的RESTful API发出的GET请求。我想构建请求以仅检索已收到今天的记录。

$http({
    method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        // WHAT DO I PUT HERE?
        createdAt: /* greater than 8am today, less than or equal to current time */
    }
})

在阅读有关查询约束的Parse API文档后,我修改了$ http GET。但是,它仍会返回所有订单。

var startDate = new Date();
var currentTime = new Date().getTime();
startDate.setHours(8);//set time to 8 am.
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})

编辑1:在构造我的get请求时,如下所示:我收到400 HTTP错误,包含以下内容:

code: 107
error: "invalid date {1.433264918052e+12}"

编辑2(求助):我已经解决了这个问题。在解析了params属性的结构之后,我了解到Parse API需要一个ISO格式的DateTime。所以,我的最终版本看起来像这样:

var startDate = new Date().toISOString();
var currentTime = new Date().getTime().toISOString();
startDate.setHours(8);//set time to 8 am.
var deferred = $q.defer();
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})

如果有人想利用这个机会并给出详尽的解释,我很乐意给他们答案(例如Parse在标准的Unix纪录时间使用ISO会有什么好处?)。

2 个答案:

答案 0 :(得分:1)

您可以传递from和to日期时间戳以传递一系列日期。尝试这样的事情。

var startDate = new Date();
startDate.setHours(8);//set time to 8 am.

$http({
    method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        createdFrom: startDate.getTime(),
        createdTo: new Date().getTime()
    }
});

在服务器端,您可以将时间戳转换为日期对象,以将其传递给DB存储过程或查询。

答案 1 :(得分:0)

意识到我很久以前在问题中发布了答案。用后代的官方答案更新此内容。

我已经解决了这个问题。在解析了params属性的结构之后,我了解到Parse API需要一个ISO格式的DateTime。所以,我的最终版本看起来像这样:

var startDate = new Date().toISOString();
var currentTime = new Date().getTime().toISOString();
startDate.setHours(8);//set time to 8 am.
var deferred = $q.defer();
$http({ method: "GET",
    url: "https://api.parse.com/1/classes/Order",
    headers: {
        "X-Parse-Application-Id": PARSE_CREDENTIALS.APP_ID,
        "X-Parse-REST-API-Key": PARSE_CREDENTIALS.REST_API_KEY,
        "Content-Type": "application/json"
    },
    params: {
        where: {
            "createdAt": { "$gte": startDate, "$lte": currentTime }
        }
    }
})