2014-11-17 72 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