parse.com - 我怎么可以按照日期仅使用JavaScript创建查询等于createdAt

问题描述 投票:9回答:2

我想通过“createdAt”字段查找数据,但我需要时间来搜索只(无时间)。

var d = new Date();
var query = new Parse.Query("TableName");
query.equalTo("createdAt", d);

NA级

javascript parse-platform
2个回答
23
投票

什么你基本上做产生两个日期:

  • date在0:0:0次
  • date+1day在0:0:0次

然后搜索:

query.greaterThanOrEqualTo('createdAt', date);
query.lessThan('createdAt', datePlusOne);

这有效地为您提供了dateT0范围:0:0 - dateT23:59:59.99999包容性,但在一个安全的方式

如果你想使用纯JavaScript:

// assuming date is the date/time to start from
 date.setHours(0, 0, 0, 0);
// hours/min/sec/ms cleared
 var datePlusOne = new Date(date);
 datePlusOne.setDate(datePlusOne.getDate() + 1);

您还可以使用moment library让你的代码更容易阅读/维护。该库也用于parse.com服务器端,虽然这是一个旧版本。

 m1 = new moment(date);
 m1.startOf('day');
 m2 = new moment(m1);
 m2.add(1, 'day');
// convert moment back to JavaScript dates
 date = m1.toDate();
 var datePlusOne = m2.toDate();

使用矩完整的解决方案:

var d = new Date();
var query = new Parse.Query("TableName");

var start = new moment(d);
start.startOf('day');
// from the start of the date (inclusive)
query.greaterThanOrEqualTo('createdAt', start.toDate());

var finish = new moment(start);
finish.add(1, 'day');
// till the start of tomorrow (non-inclusive)
query.lessThan('createdAt', finish.toDate());

query.find.then(function(results) {
  // use results
});

3
投票

如果你正在寻找的结果,通过“今天创建”过滤,你可以这样做:

var moment = require("moment");
var start = moment().sod() //Start of day
var end = moment().eod() //End of day

var query = new Parse.Query("myClass")
query.greaterThanOrEqualTo("createdAt", start.format());
query.lessThan("createdAt", end.format());
query.find({...});

当然,如果你正在寻找比“今天”更大的时间跨度,你会去与提摩太的答案。

此代码已在解析云代码经过测试与Momentjs 1.7.2

© www.soinside.com 2019 - 2024. All rights reserved.