2014-11-17 75 views
1

我正在尝试使用PFQuery搜索包含特定日期(没有时间)的所有结果。我似乎无法弄清楚它为什么不起作用。我使用的代码如下。按日期排列的PFQuery

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"YYY-MM-dd"]; 
NSString *today; 
today = [dateFormat stringFromDate:[NSDate date]]; 

PFQuery *query = [PFQuery queryWithClassName:@"Booking"]; 

[query whereKey:@"nextAppointment" equalTo:today]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { etc etc... 

将字段nextAppointment设置为使用Parse网站的日期。 任何帮助,将不胜感激

+0

你是什么意思说“nextAppointment被设置为一个日期”? – Seryozha

回答

5

NSDate对象和Parse.com日期字段都有一个确切的时间,包括小时和分钟。这意味着如果您正在寻找某一天发生的约会,则实际上您正在搜索日期范围:该特定日期的上午12:00至下午11:59。

如果您创建的NSDate没有明确的小时和分钟,Parse并不知道您的意思是“当天的所有日期” - 它通过填充小时和分钟并搜索确切时间来解释它。你用日期范围搜索来解决这个问题。

下面是如何从我的应用程序之一做这样的一个例子,修改你的目的:

//Create two dates for this morning at 12:00am and tonight at 11:59pm 
NSDate *now = [NSDate date]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now]; 
[components setHour:0]; 
[components setMinute:0]; 
[components setSecond:1]; 
NSDate *morningStart = [calendar dateFromComponents:components]; 

[components setHour:23]; 
[components setMinute:59]; 
[components setSecond:59]; 
NSDate *tonightEnd = [calendar dateFromComponents:components]; 

PFQuery *query = [PFQuery queryWithClassName:@"Booking"]; 
[query whereKey:@"nextAppointment" greaterThan:morningStart]; 
[query whereKey:@"nextAppointment" lessThan:tonightEnd]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (!error) { 
     //Etc... 
    } 
}]; 
+0

我从来没有真正这样想过。非常感谢你,这是一个很大的帮助。 –

+0

使用[NSDate日期]您认为电话具有正确的日期设置!如果您想要得到相同的结果,但使用了不正确的[NSDate日期],那么该怎么办? – Kingofmit