查询日期约束

时间:2014-08-13 15:43:38

标签: ios parse-platform nsdate

我已经对这个问题进行了研究,并认为我找到了有意义的答案,但它不起作用所以我不确定我是否犯了一个愚蠢的错误。我想查询过去一周,一个月,一年,等等创建的数据。我查看了已上传到解析的数据并对其进行测试,我想查询过去5天的数据。出于某种原因,当8月8日之后应该创建五个对象时,它会找到0个对象。当我切换到lessThanOrEqualTo它发现所有9个对象,即使在8月8日之前创建了4个对象。对此有任何澄清。感谢

NSDate *then=[NSDate dateWithTimeIntervalSinceNow:-7200];
PFQuery *query=[PFQuery queryWithClassName:@"urinationAmount"];
[query whereKey:@"user" equalTo:[PFUser currentUser]];
[query whereKey:@"createdAt" greaterThanOrEqualTo:then];
urinationDataArray=[query findObjects];
NSLog(@"Objects in Array:%i",urinationDataArray.count);

2 个答案:

答案 0 :(得分:2)

根据Date and Time Programming Guide,您不应手动执行日历计算。

来自同一文件的引言说:

  

NSDate提供日期和时间的绝对比例和纪元,然后可以将其渲染到特定日历中以进行日历计算或用户显示。要执行日历计算,通常需要获取日期的组成元素,例如年,月和日。您应该使用提供的方法来处理日历计算 ,因为它们会考虑角落情况,例如夏令时开始或结束以及闰年

所以五天前应该是这样的:

NSCalendar * currentCalendar = [NSCalendar currentCalendar];
NSDateComponents * dateComponents = [NSDateComponents new];
NSDate * now = [NSDate date];

[dateComponents setDay:-5];//five days ago

NSDate * fiveDaysAgo = [currentCalendar dateByAddingComponents:dateComponents toDate:now options:0];

您可以查看NSDateComponents Class Reference以了解可用于计算的更多日历单元。

答案 1 :(得分:1)

以下代码不会在五天前给你:

NSDate *then=[NSDate dateWithTimeIntervalSinceNow:-7200]; 

你应该这样做:

NSDate *then=[NSDate dateWithTimeIntervalSinceNow:-1 * (86400 * 5)];

一天有86,400秒。